首页 文章 精选 留言 我的

精选列表

搜索[HarmonyOS SDK],共10000篇文章
优秀的个人博客,低调大师

API网关的iOS SDK已经支持 IPV6

5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,有些用户在这块就踩到坑了,多次被拒。下面我们就Apple在这块的规定分析一下,我们的App如何才能避免在这个问题上吃Apple的闭门羹。 IPV6-Only支持解释 IPV6是对IPV4地址空间的扩充。目前我们用iOS设备连上网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IPV6 DNS64/NAT64网络之后,设备被分配的地址会变成IPV6的地址,而这些网络就是所谓的IPV6-Only网络。重点是,目前iOS设备仍然可以通过此网络去获取IPV4地址提供的内容。客户端向服务器端请求域名解析,首先通过DNS64 Server查询IPv6的地址,如果查询不到,再向DNS Server查询IPv4地址,通过DNS64 Serv

优秀的个人博客,低调大师

Android SDK上手指南:Java应用程序编程

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/52996921 介绍 如果大家已经对Java非常熟悉,那么不妨直接忽略这部分内容。如果大家的技巧还存在局限或者对Java这种语言只闻其名,那么本文将为各位解答很多在Android开发当中经常遇到的问题。需要注意的是,这篇文章并不能作为Java起步教程来阅读,最多只能算是基础知识汇总。如果对Java毫无了解,大家还需要参考其它一些额外的Java学习资料。 在这份教程中,我们不会过度深入细节,不过如果大家对于某些概念还不大清楚,请点击此处参阅甲骨文Java指南。这是一份非常优秀的Java语言指导材料,非常适合初学者。如果在刚刚开始阅读时发现本教程提到的一些内容有些陌生,也请大家千万不要惊慌。只要真正着手开始在Android项目中进行尝试,各位很快就能理解本文表达的内容。 1. Java语法 第一步 大家已经在我们的Android项目中见识过一部分Java语法了,但为了清楚起见,让我们再从另一个项目重新学习。这一次我们不再使用Android项目,而直接换成Java项目——这样大家就能更轻松地感受到我们所使用的结构。打开Eclipse,点击“New”按钮。在弹出的导航窗口中下滚到Java文件夹中并将其打开,选择“Java Project”然后单击下一步。 输入“MyJavaProject”作为项目名称并点击“Finish”。Eclipse接下来会在工作区内创建我们的新项目。在Package Explorer当中,打开新项目文件夹,右键点击“src”并选择“New”、然后选“Class”。这时在Name框中输入“MyMainClass”。接着勾选旁边的复选项“public static void main”最后点击“Finish”。 Eclipse会创建出类并在编辑器中打开。大家不必过多关注项目结构或者类中的现有内容,因为我们的Android项目所使用的结构与Java项目并不相同。各位可以利用这个项目来磨练自己的Java编码技能,在这里代码的运行与测试都要比Android应用简便得多,而且我们也能更多地关注Java语法本身。 我们在类文件中看到的“public static void main”行就是主方法。无论方法的具体内容是什么,它都会在应用程序运行时加以执行。方法的内容就是显示在“public static void main(String[] args)”后面大括号里的部分。Eclipse可能还生成了一个“to do”行——直接无视就好。在其后创建新行,我们就从这里开始添加自己的代码。 第二步 在Java当中,一条变量可以保存一个数据值,例如文本字符串或者数字。当我们在Java中创建或者“声明”一个变量时,需要指定其中的数据类型并为其命名。输入以下代码: intmyNum; 这一行声明了一个整数变量。我们可以通过以下代码行声明一个变量并为其分配一个值: intmyNum=5; 现在我们可以通过名称引用这条变量了。添加以下代码行,从而将变量值写入到输出控制台: System.out.println(myNum); 大家一般不会在自己的Android应用中以这种方式向系统输出写入结果,而是用LogCat视图取而代之。不过通过这种输出写入方式,我们能够更为便捷地对Java代码进行测试。 第三步 现在让我们运行应用。运行过程与Android应用存在些许不同,但我们会在稍后继续进行说明。选择“Run”,而后选择“Run Configurations”。在弹出的列表左侧选择“Java Application”并点击上方的“New launch configuration”。如果这是我们的惟一一个Java应用,Eclipse会自动选择运行刚刚创建完成的小小成果。 现在点击“Run”来运行我们的应用程序。大家会看到,编辑器下方的控制台视图中将显示出数字“5”。大家可以利用这种方式在学习过程中对Java代码进行测试。 大家现在可以通过工具栏中的“Run”按钮随时运行上一次启动过的项目。 第四步 无论何时,只要是在Java中进行变量声明,我们都会使用相同的语法。为了在以后的编程工作中为变量分配不同的值,我们可以通过名称对其进行引用: myNum=3; 上述代码会覆盖掉现有值。在Java中存在着很多不同的变量类型。其中int属于被引用的基本类型,此外还有一些其它数字类型;char用于字符值,而boolean则用于保存真假值。对象的类型也分许多种;关于对象的话题,我们放在以后进行讨论。对于大家来说,最熟悉的基本对象类型应该要数String了,它的作用是保存一条文本字符串: StringmyName="Sue"; 文本字符串值要用引号括起来。大家可以在正面的例子中看到它的使用方法: System.out.println("number:"+myNum); 添加上述代码并运行,控制台会显示“number:”再加上变量值。 第五步 在上面我们看到了赋值运算符“=”——正面我们再来看其它一些常见运算符: //add myNum=5+6; //subtract myNum=7-3; //multiply myNum=3*2; //divide myNum=10/5; //remainder myNum=10%6; //increment(addone) myNum++; //decrement(subtractone) myNum--; 运算符既可以被用在变量当中,也可以作为硬编码数字(如上所示): intmyNum=5; intmyOtherNum=4; inttotal=myNum+myOtherNum;//9 第六步 作为Android基础内容的另一种Java结构就是注释。大家可以通过以下两种方式添加注释: //thisisasinglelinecomment /*Thisisamultilinecomment *stretchingacrosslines *togivemoreinformation */ 最重要的是养成编写代码的同时添加注释的好习惯,这一方面便于我们自己日后查看,另外也能让其他合作者了解我们的编码意图。 2. 控制结构 第一步 我们向主方法中添加的代码会在Java应用程序运行时同时执行。而在运行我们所创建的Android应用程序时,主Activity中onCreate方法的代码会同时执行。这些方法中的所有代码行都会按从上到下的顺序依次执行,不过执行的流程并不总是线性的。Java当中有很多控制结构,正面我们就从条件开始了解其中最常见的几种。条件语句一般用于进行测试从而确定执行流程。在Java当中,最简单的条件结构就是if语句: if(myNum>3) System.out.println("numberisgreaterthan3"); 这项测试的目的在于检查变量的值是否大于3。如果确实大于3,那么字符串将被写入输出结果。如果小于等于3,则不向输出结果写入任何内容、继续执行程序中的下一行。条件测试会“返回”一个真假值。真与假都属于boolean值。我们也可以向其中添加else,这样其内容只会在返回假值时才执行: if(myNum>3) System.out.println("numberisgreaterthan3"); else System.out.println("numberisnotgreaterthan3"); 在我们的示例中,else语句会在值等于或者小于3时执行。尝试在代码的整数变量中添加不同的值,看看条件测试结果会发生哪些变化: if(myNum>10) System.out.println("numberisgreaterthan10"); elseif(myNum>7) System.out.println("numberisgreaterthan7"); elseif(myNum>3) System.out.println("numberisgreaterthan3"); else System.out.println("numberis3orless"); 只有在流程中的每一次测试中都返回假值时,所有测试行才会被彻底执行一遍。因此对于大部分数字来说,只会输出一条字符串。如果有必要,大家可以把多条else if语句串点起来。大家还可以利用if语句与一个或者多个else if相结合,而不必每一次都在之后单独设置else。 下面我们测试一个数字是否大于另一个。尝试使用以下变量: if(myNum<10) System.out.println("numberlessthan10"); if(myNum==10) System.out.println("numberequals10"); if(myNum!=10) System.out.println("numberisnotequalto10"); if(myNum>=10) System.out.println("numbereithergreaterthanorequalto10"); if(myNum<=10) System.out.println("numbereitherlessthanorequalto10"); 大家也可以利用包含字符串的变量类型进行类似的测试。要同时进行多项测试,可以利用以下语法: if(myNum>=10&&myNum<=50) System.out.println("numberisbetween10and50"); 其中的“&&”是作为“and”运算符存在的,意思是整条语句只有在两项测试都返回真值时才被判定为真。而“or”运算符将在两条测试中任意一条返回真值时判定为真: if(myNum<0||myNum!=-1) System.out.println("numberislessthan0ornotequalto-1"); 为了将代码组成代码块,我们可以使用大括号——两个括号之间的所有代码都会在测试返回真值时执行: if(myNum<10) { System.out.println("numberlessthan10"); myNum=10; } 这些括号能够在循环、方法以及类中实现代码分组。 第二步 接下来让我们看看循环。下面的for循环会进行十次遍历,意味着它的内容将执行十次: for(inti=0;i<10;i++){ System.out.println(i); } 在for循环中的第一个表达式旨在将一个整数型计数器变量初始化为零。第二个表达式则是条件测试,检查该变量的值是否小于10。如果返回的是真值,则循环内容得到执行;如果返回的是假值,则中止循环。一旦循环当中的内容开始执行,第三个表达式就同时执行,即递增计数器。 另一种循环while所使用的语法稍有区别。以下代码就是我们利用while来实现上面的for循环的相同执行效果: inti=0; while(i<10){ System.out.println(i); i++; } 循环当中可以容纳多行代码,其中包括其它循环。 第三步 我们已经接触了主方法与Android的onCreate方法。下面让我们一起学习如何创建自己的方法。将以下方法放置在主方法的右括号之后: publicstaticvoiddoSomething(){ System.out.println("something"); } 该方法被定义为public,这意味着项目中的所有类都可以调用其进程。如果它的属性为“private”,则代表只供同一个类内部进行访问(也就是‘visibility’)。一般来说,大家不会在自己的第一个Android应用中包含“static”修饰符,因此忽略掉它即可。而“void”代表着返回类型。在我们的示例中,该方法不会返回任何值。为了执行该方法,我们需要在主方法中添加一项调用: doSomething(); 运行应用程序并查看其功能——改变方法以返回一个值: publicstaticintdoSomething(){ return5; } 改变方法调用并再次运行: System.out.println(doSomething()); 返回的值会被写出。方法还可以接收参数: publicstaticintdoSomething(intfirstNum,intsecondNum){ returnfirstNum*secondNum; } 在调用该方法时,大家必须符合正确的参数类型与数字: System.out.println(doSomething(3,5)); 方法能够将应用程序进程拆分为逻辑块。如果大家需要多次执行同一项任务,那么它们的作用将非常重要;我们可以简单在方法中进行定义,然后在需要时随时调用。如果各位需要改变处理流程,也只需在方法代码中进行修改。 3. 类与对象 第一步 我们已经了解了方法如何被用于重新使用代码并将其拆分成逻辑部分。类与对象则能够在更大的范围内实现此类功能。大家可以将应用中的任务划分成不同对象,其中每个对象都由它所归属的类为其定义一系列职责。这类似于用一种方法负责一个特定功能区域,不过一个对象可以拥有多个方法而且能够保存数据值。 想象我们正在创建一款游戏——大家可以创建一个专门用来处理用户详细信息的类。在Package Explorer中选择我们的应用程序包,右键点击并选择“New”而后是“Class”。输入“GameUser”作为类名称,确保main method stub复选框没有被勾选,然后点击“Finish”。Eclipse会打开这个类文件,在初始状态下其中只包含它的类声明概要: publicclassGameUser{ //classcontent } 大家所添加的所有内容都应该位于两个大括号之间(除非大家添加导入语句,这部分内容将位于最前方)。我们的Android应用会识别出罗列于文件开头的包名称。当然这里我们使用的是默认包,所以前面并没有列出其它内容。 第二步 在这个类当中添加以下变量: privateStringplayerName; rivateintscore; 这些被称为“实例变量”,因为它们被定义为我们所创建的类中的实例。在它们之后添加一个构造方法,它会在该类中的某个对象被创建后开始执行: publicGameUser(StringuserName,intuserScore){ playerName=userName; score=userScore; 这里的构造永远与类使用同样的名称,而且可能要求也可能不要求使用参数。该构造通常应该向实例变量分配值,一般是通过参数来实现。 第三步 类也可以定义方法。将以下典型集合添加到构造之后: publicStringgetName(){returnplayerName;} publicintgetScore(){returnscore;} publicvoidsetName(StringnewName){playerName=newName;} publicvoidsetScore(intnewScore){score=newScore;} 这些被称为get与set方法,或者叫getter与setter,因为它们会利用接收及发送实例变量值的能力将外部代码添加到类中来。查看Eclipse中的Outline视图,理解它如何帮助实现导航类内容。 第四步 保存我们新建的类文件。回到主类当中,为新类在主方法中创建一个对象: GameUseraUser=newGameUser("Jim",0); 我们符合构造当中的参数要求——以上代码中的“new”关键字将使构造开始执行。现在我们可以使用这个类实例,通过调用其方法访问其中的数据: System.out.println(aUser.getScore()); aUser.setScore(5); System.out.println(aUser.getScore()); 运行程序以查看调用对象上的public方法之后,值产生了什么样的变化。大家可以创建多个对象实例,并对它们进行分别管理: GameUseranotherUser=newGameUser("Jane",5); 4. 继承与界面 第一步 我们已经了解了如何通过创建对象实例来使类定义一系列职责。它的效果不仅作用于我们所创建的类本身,同时也作用于其它我们能够使用的现有Java及Android类。除此之外,在创建这些平台类实例的同时,大家还可以利用继承对其加以扩展。在继承机制的帮助下,我们可以创建出一个继承现有类功能、同时又拥有自己运行流程的类。在我们所创建的第一个Android项目中,主Activity类就是一个很好的例子。 现在打开Android项目中的这个类。在类声明的开头,大家会看到“extends Activity”。这意味着该类属于Android Activity类中的一个子类。这里的Activity类用于使Android系统处理向用户呈现的屏幕内容,而各方法则用于不同变量状态下的屏幕内容(创建、暂停与消除等)。通过向Android Activity类声明中的定义方法添加代码并在必要时增加额外方法的方式,我们能够更专注于实现应用程序的独特风格。 这是我们经常会在Android上使用的模式,用于为应用程序的常见需要扩展定义类。大家可以用自己的类适当对其加以补充。 第二步 再来看Activity类中的起始行。请记住,我们添加了“implements OnClickLisener”来处理UI中的按钮点击操作。这将通过引用被实施在界面当中。界面类似于一个我们利用“extends”继承而来的类,只不过界面声明只需简单罗列方法概述。大家需要对每一项概述进行方法实施。因此当我们实施OnClickListener时,需要委托该类提供一个onClick方法——正如我们在之前的Android项目中所做。因此界面类似于一项协定。在继承机制的辅助下,扩展类能够继承由类声明所提供的、用于实现超类(即经过扩展的类)的方法实施。如果需要,大家可以覆盖这些实施内容。 总结 在今天的教程中,我们简要介绍了一些Java语法方面的基本知识。当然,还有很多其它关于Java的结构与概念需要了解。如果大家此前没有接触过Java,又希望保证自己能拥有足以顺利应对Android开发工作的必要知识,请务必点击此处认真阅读甲骨文公司发布的Java指南。其中需要认真学习的主题包括数组与交换语句。在本系列的后续文章中,我们将探讨一些大家最常用到的Android类。而在下一章节中,我们则开始探索Android应用项目中的资源。

优秀的个人博客,低调大师

Android SDK上手指南:Activity与生命周期

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/52997036 介绍 Activity生命周期并不仅仅在用户运行应用程序之后才开始生效,事实上它也影响着用户切出以及切回应用时得到的不同反馈。当我们开发一款应用时,首先需要牢记一点:用户会经常在执行过程中、在我们的应用与其它应用之间频繁切换。取决于用户的操作方式,同一款应用程序有时在前台运行、有时则在后台运行。大家必须保证自己的应用能够就会这类情况,并在此类切换过程中及时保存并恢复数据。再次提醒各位,这一过程对于某些特定应用程序略有不同——例如功能性组件。 1.回调方法 第一步 为了控制Activity处于不同状态下时应用程序的运行方式,例如当用户切出或者切回应用,大家可以选择多种处理方法。这类方法也就是Activity生命周期回调方法。Android系统会在我们的Activity进入某种特定状态后调用这些方法,从而通过一系列步骤确保我们的应用程序能够继续起效、不至于丢失数据而且在用户不与之交互时不会使用非必要性资源。每一种回调方法都会让我们的应用进入一种可能的状态。 如果大家之前曾经接触过Java应用程序的编程工作,那么应该已经发现Android应用程序的启动遵循另一种方式。与Java应用直接使用主方法不同,Android在启动后会首先执行主Activity类中的onCreate方法。请记住,我们已经在清单中将该类指定为主启动Activity。Activity会首先回调onCreate方法,相当于重复用户启动应用程序后的流程。这时候onCreate方法会使应用程序进入Created状态。 开发者指南当中通过示意图以直观方式介绍了生命周期、回调方法以及状态的概念。其中onResume方法负责提供Resumed状态,这时我们的应用程序可以接受用户的直接操作。其它各类回调方法都以onResume为核心,即将应用程序引导至Resumed状态或者从该状态脱离、启动该状态或者将其停止。 对于大部分应用程序来说,我们只需要使用一部分回调方法,但最起码要用到onCreate。虽然使用频率不高,但了解全部回调及状态的作用将帮助我们了解自己的应用程序在运行及停止运行时,Android系统会受到怎样的影响。一般情况下,大家需要保证用户能够在任何操作过程切换出去之后、都能顺利恢复到之前的运行状态;如果他们通过导航选择前进或者后退,应用则需保存全部必要数据并释放不必要占用的硬件资源。 第二步 我们的应用程序可能处于以下五种状态,分别为:Created、Started、Resumed、Paused以及Stopped。另有七种回调方法能够让应用进入或者脱离上述状态,它们分别是:onCreate、onStart、onRestart、onResume、onPause、onStop以及onDestroy。这些方法能够让我们的应用程序在可能的状态之间进行切换,而且某些情况下切换速度会很快。通常来说,大家可以认为自己的应用程序始终处于resumed、paused或者stopped这三种状态之下,因为其它状态都是暂时性的。 当我们的应用程序正处于运行当中且用户与之进行操作交互,这时的应用状态为Resumed;当另一个Activity处于前台但仅仅使我们的应用被部分隐藏时,这时的应用状态为Paused——在这种状态下用户无法再与应用进行交互。当我们的应用完全处于后台之下,而且用户既无法操作、也无法观看到它时,其状态即为Stopped。在这种状态下Activity会保留之前的所有数据,但无法加以执行。 2.进入Resumed状态 如我们所知,主Activity会在应用程序启动时开始运行,onCreate方法也将执行、从而让我们准备该类所需要的Activity UI以及全部数据条目。我们创建的大部分应用当中都包含不只一个Activity,其它Activity会在用户与应用程序进行操作交互时启动。大家可以利用以下代码通过Intent类启动另一个非主Activity: 这代表着应用程序包中另一个名为“About”的Activity类。大家可以通过选择自己的源码包而后选择“文件”、“新建”、“类”的方式在Eclipse当中创建一个新Activity,而后将该Android Activity类选定为超级类。请记住,每一个Activity都必须在我们的应用程序清单当中列出。大家还可以利用Intent类实现不同Activity之间的数据转移。 当一个Activity处于运行当中时,onCreate方法也在同时执行,因此除了把其它Activity类列入清单之外、大家也能够以与主Activity类似的方式在应用程序当中处理这些类。我们也可以为每个Activity创建一个布局文件,并通过设置让其使用与主Activity同样的技术机制。 在某个Activity的onCreate方法开始执行之后,onStart与onResume两个方法也将开始执行, 从而使该Activity处于Resumed状态、并在后续执行过程中根据情况转换为Created以及Started状态。 我们的Activity可以通过不只一种方式进入Resumed状态,应用程序启动只是其中最基本的途径。如果Activity处于Paused或者Stopped状态,则应用程序切换至当前之后该Activity将直接进入前台运行模式,且无需重复调用onCreate方法。如果大家的应用从Paused状态切换回Resumed状态,则Activity的onResume方法将开始执行。如果该应用由Stopped状态切换回运行状态,则执行onRestart方法、而后依次为onStart与onResume方法。 3.进入Destroyed状态 第一步 当我们的应用程序处于退出或者隐藏状态下,则Resumed就会转变为Destroyed。这时候,onPause方法会将应用的Activity由运行时的Resumed状态转换为Paused状态。在onPause当中,大家应当停止任何需要占用资源的任务,例如动画播放、传感器数据处理以及广播接收等等。如果onPause正在执行,那么onStop也可以开始执行,因为用户此时通常已经通过导航退出了我们的应用程序。大家还可以利用onPause方法进行数据保存——虽然通常来说数据保存工作由onStop方法来负责最为妥当。 正如我们之前曾经提到,大家的Activity能够通过onResume方法从Paused状态重新回归至Resumed状态。这意味着我们可以利用onResume来恢复任何我们之前在onPause当中停止或者发布过的内容。不过大家还需要记住一点,onResume在其它情况下也会付诸执行,例如在应用程序启动时。 第二步 在onPause之后,如果应用程序进入Stopped状态,那么onStop也将开始执行。在这种情况下,onRestart、onStart以及onResume等方法仍然能够使应用程序重新回到Resumed状态。在onStop中,大家应当尽可能压缩只在必要数据的操作量,例如向数据库中写入内容。请大家确保在onStop当中囊括了所有应用程序所使用的资源,从而避免该应用在被彻底关闭之后导致内存溢出问题。 这套系统会在应用程序从resumed状态切换至stopped状态后保存特定数据,例如视图中需要显示的内容。当某个Activity从Stopped状态恢复到Resumed状态时,onRestart、onStart以及onResume方法都会开始执行。不过onStart与onResume的执行情况有所不同——例如在应用程序启动之时。而onRestart方法只会在应用程序从Stopped状态恢复至前台之后才会执行,这样大家就能利用它来恢复任何保存在onStop当中的运行内容。 提示:当大家从一个Activit之下启动另一个Activity时,前者会进入Stopped状态。如果用户随后利用后退按钮再次由后者返回先前的Activity当,那么前者的onRestart方法就会开始执行。 第三步 如果大家的应用程序即将彻底关闭,例如我们的当前Activity被从系统当中移除,则onDestroy方法会开始执行。尽管这是在我们的Activity完全消失之前执行的最后一个方法,大家仍然不应该简单地将所有内容一股脑清除。事实上,我们需要利用onStop或者onPause来处理结束工作。当然也有例外情况,如果应用程序的后台进程仍然处于运行状态,那么这时候大家应该在onDestroy当中将其停止。 在onDestroy执行之后,如果用户通过导航返回应用程序Activity,则对应onCreate方法将再次被启动。一般情况下,大家可以假设onPause与onStop会在onDestroy之前执行。不过如果大家明确调用finish方法来结束一个Activity,则只有onDestroy会被执行。 在多数情况下,我们并不需要为应用程序当中的生命周期回调问题投入过多精力,因为大家完全可以利用onCreate方法的参数实现数据保留效果。在Activity onCreate方法当中,Bundle参数负责如前所述自动进行视图信息保存。不过大家也可以利用该对象保存更多数据内容,例如记录用户与应用程序之间的交互所产生的变量更新。要实现这一目标,大家可以在Activity类当中使用onSaveInstanceState方法,完成数据键值对的编写之后、我们就可能在onCreate当中将其恢复。 提示:当用户改变设备显示模式时,也就是在纵向及横向模式间进行切换,我们的Activity实际上会经历重新创建、onCreate也会被再次执行。这一过程被我们称为配置变化。在这种情况下,系统会假设大家需要重新创建Activity,例如大家在每种显示模式下使用不同的布局方案。不过在多数情况下,大家可能不希望系统照此办理。为了避免我们的Activity在显示模式转换时发生重新创建,大家可以从两种解决方式中作出选择:向清单内的Activity添加“android:configChanges”属性,或者调整我们的Activity结构、利用我们在配置变量时所保留的Fragments。 总结 当大家开始学习如何为Android平台开发应用程序时,Activity当中所涉及的大量状态与回调方法可能会成为很多难题乃至混乱的根源。然而在大多数情况下,我们只需要采用最低数量的方法以确保自己的应用程序有能力提供用户所预期的功能与效果。在本系列教程的下一篇当中,我们将共同了解部分常用Android类,大家很可能会在自己的第一款应用当中与它们打交道。在此之后,我们将着眼于Android代码示例、需要了解的应用程序发布知识以及其它一些关于今后进一步学习的建议。

优秀的个人博客,低调大师

使用 MaxCompute(原ODPS) java sdk 运行安全相关命令

转自zhenhong 使用 MaxCompute console 的同学,可能都使用过 odps 安全相关的命令。官方文档上有详细的 odps 安全指南,并给出了安全相关命令列表。 简而言之,权限管理、项目空间安全配置以及用户及授权管理都属于 odps 安全命令相关的范畴。 再直白一点,以下列关键字开头的命令,都是 odps 安全相关操作命令: GRANT/REVOKE ... SHOWGRANTS/ACL/PACKAGE/LABEL/ROLE/PRINCIPALS SHOW PRIV/PRIVILEGESLIST/ADD/REOVE USERS/ROLES/TRUSTEDPROJECTS DROP/CREATEROLECLEAR EXPIRED GRANTSDESC/DESCRIBEROLE/PACKAGECREATE/DELET

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册