当前位置:K88软件开发文章中心编程语言APP编程Android01 → 文章内容

4.1.1 Activity初学乍练

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-12 6:26:08

本节引言:本节开始讲解Android的四大组件之一的Activity(活动),先来看下官方对于Activity的介绍:PS:官网文档:Activity介绍如下:大概意思:Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作,比如打电话,照相,发送邮件,或者显示一个地图!Activity可以理解成一个绘制用户界面的窗口,而这个窗口可以填满整个屏幕,也可能比屏幕小或者浮动在其他窗口的上方!从上面这段话,我们可以得到以下信息:1. Activity用于显示用户界面,用户通过Activity交互完成相关操作2. 一个App允许有多个Activity好了,大概的引言就介绍到这里,想深入了解可以继续看API,开始本节内容~1.Activity的概念与Activity的生命周期图:注意事项:1. onPause()和onStop()被调用的前提是:打开了一个新的Activity!而前者是旧Activity还可见的状态;后者是旧Activity已经不可见!2. 另外,亲测:AlertDialog和PopWindow是不会触发上述两个回调方法的~2.Activity/ActionBarActivity/AppCompatActivity的区别:在开始讲解创建Activity之前要说下这三个的一个区别:Activity就不用说啦,后面这两个都是为了低版本兼容而提出的提出来的,他们都在v7包下,ActionBarActivity已被废弃,从名字就知道,ActionBar~,而在5.0后,被Google弃用了,现在用ToolBar...而我们现在在Android Studio创建一个Activity默认继承的会是:AppCompatActivity!当然你也可以只写Activity,不过AppCompatActivity给我们提供了一些新的东西而已!两个选一个,Just you like~3.Activity的创建流程PS:好了,上面也说过,可以继承Activity和AppCompatActivity,只不过后者提供了一些新的东西而已!另外,切记,Android中的四大组件,只要你定义了,无论你用没用,都要在AndroidManifest.xml对这个组件进行声明,不然运行时程序会直接退出,报ClassNotFindException...4.onCreate()一个参数和两个参数的区别:相信用as的朋友在重写Act的onCreate()方法时会发现,这玩意有两个参数:可是正常的才只有一个参数啊:恩呢,这就是5.0给我们提供的新的方法,要用它,先要在配置文件中为我们的Activity设置一个属性:android:persistableMode="persistAcrossReboots"然后我们的Activity就拥有了持久化的能力了,一般我们会搭配另外两个方法来使用:public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState)相信有些朋友对这两个方法名不陌生吧,前一个方法会在下述情形中被调用:点击home键回到主页或长按后选择运行其他程序按下电源键关闭屏幕启动新的Activity横竖屏切换时,肯定会执行,因为横竖屏切换的时候会先销毁Act,然后再重新创建重要原则:当系统"未经你许可"时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(你可以保存也可以不保存)。而后一个方法,和onCreate同样可以从取出前者保存的数据:一般是在onStart()和onResume()之间执行!之所以有两个可以获取到保存数据的方法,是为了避免Act跳转而没有关闭,然后不走onCreate()方法,而你又想取出保存数据~说回来:说回这个Activity拥有了持久化的能力,增加的这个PersistableBundle参数令这些方法拥有了系统关机后重启的数据恢复能力!!而且不影响我们其他的序列化操作,卧槽,具体怎么实现的,暂时还不了解,可能是另外弄了个文件保存吧~!后面知道原理的话会告知下大家!另外,API版本需要>=21,就是要5.0以上的版本才有效~4.启动一个Activity的几种方式在Android中我们可以通过下面两种方式来启动一个新的Activity,注意这里是怎么启动,而非启动模式!!分为显示启动和隐式启动!1. 显式启动:通过包名来启动,写法如下:①最常见的:startActivity(new Intent(当前Act.this,要启动的Act.class));②通过Intent的ComponentName:ComponentName cn = new ComponentName("当前Act的全限定类名","启动Act的全限定类名") ;Intent intent = new Intent() ;intent.setComponent(cn) ;startActivity(intent) ;③初始化Intent时指定包名:Intent intent = new Intent("android.intent.action.MAIN");intent.setClassName("当前Act的全限定类名","启动Act的全限定类名");startActivity(intent);2.隐式启动:通过Intent-filter的Action,Category或data来实现这个是通过Intent的 intent-filter**来实现的,这个Intent那章会详细讲解!这里知道个大概就可以了!3. 另外还有一个直接通过包名启动apk的:Intent intent = getPackageManager().getLaunchIntentForPackage("apk第一个启动的Activity的全限定类名") ;if(intent != null) startActivity(intent) ;5.横竖屏切换与状态保存的问题前面也也说到了App横竖屏切换的时候会销毁当前的Activity然后重新创建一个,你可以自行在生命周期的每个方法里都添加打印Log的语句,来进行判断,又或者设一个按钮一个TextView点击按钮后,修改TextView文本,然后横竖屏切换,会神奇的发现TextView文本变回之前的内容了!横竖屏切换时Act走下述生命周期:onPause-> onStop-> onDestory-> onCreate->onStart->onResume关于横竖屏切换可能遇到下述问题:1.先说下如何禁止屏幕横竖屏自动切换吧,很简单,在AndroidManifest.xml中为Act添加一个属性:android:screenOrientation,有下述可选值:unspecified:默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向。landscape:横屏显示(宽比高要长)portrait:竖屏显示(高比宽要长)user:用户当前首选的方向behind:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)sensor:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。nosensor:忽略物理感应器,这样就不会随着用户旋转设备而更改了("unspecified"设置除外)。2.横竖屏时想加载不同的布局:1)准备两套不同的布局,Android会自己根据横竖屏加载不同布局:创建两个布局文件夹:layout-land横屏,layout-port竖屏然后把这两套布局文件丢这两

[1] [2] [3]  下一页


4.1.1 Activity初学乍练