1、在Activity第一次被创建的时候被调用。这里是你做所有初始化设置的地方创建视图、绑定数据至列表等。如果曾经有状态记录(参阅后述SavingActivityState。),则调用此方法时会传入一个包含着此activity以前状态的包对象做为参数否onStart()在Activity正要变得为用户所见时被调用。数据刷新时候调用!当Activity转向前台时接着调用onResume()在Activity变为隐藏时接着知行onStop()onResume()onStop()在Activity开始与用户进行交互之前被调用。此时Activity位于堆栈顶部,并接收用户输入。onPause()Activ
2、ity runActivity开始运行onPasue()当系统将要启动另一个 Activity时调用。此方法主要用来将未保存的变化进行持久化,停止类似动画这样耗费CPU的动作等。这一切动作应该在短时间内完成,因为下一个Activity必须等到此方法返回后才会继续。当Activity重新回到前台会执行onResume()【弹出对话框】。当Activity变为用户不可见时会执行onStop()。是当Activity不再为用户可见时调用此方法。这可能发生在它被销毁或者另一个Activity(可能是现存的或者是新的)回到运行状态并覆盖了它。如果Activity再次回到前台跟用户交互则执行onResta
3、rt().如果关闭Activity则执行onDestroy()onRestart()onDestroy()在Activity销毁前调用。这是Activity接收的最后一个调用。这可能发生在Activity结束(调用了它的finish()方法)或因为系统需要空间所以临时的销毁了此Activity的实例时。可以用isFinishing()方法来区分这两种情况。已经完蛋了,还调用毛线!1.3.2其他中转方法在Activity停止后,在再次启动之前被调用。之后执行onStart().1.4Activity启动模式1.4.1四种启动模式standard默认模式,可以不用写配置。在这个模式下,都会默认创建
4、一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。singleTop可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。singleTask只有一个实例。在同一个应用程序中启动它的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这
5、个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。singleInstance只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。1.4.2配置样例1.5Activity启动方法1)在一个Activity中调用startActivity()方法。直接启动Activity,不带请求码。2)在一个Activity中调用startActivityForR
6、esult()方法。带请求码启动Activity。1.6请求码与响应码请求码(RequestCode)在一个业务中可能在两个按钮被单击事件中打开同一个Activity,但我们在onActivityResult事件中如何判断是哪个按钮打开了新的Activity?请求码就是为解决这个问题的,那么我们打开新的Activity时应该使用startActivityForResult(intent, 1);。其中的第二个参数就是请求码。结果码(ResultCode)在一个业务中可能要打开多个不同的Activity,那关闭Activity时在onActivityResult事件中我们如何知道关闭的是哪一个A
7、ctivity呢?结果码就是为解决这个问题的,那么我们打开新的Activity时应该使用setResult(2, intent);或在关闭Activity前调用ActivityObj.setResult(2);其中的第一个参数就是结果码。在onActivityResult事件中,通过判断resultCode更可知道是哪个Activity被关闭了。2BroadcastReceiver2.1概念BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。2.2应用场景在Android系统中,广播体现在方方面面:eg:1.当开机完成后系统会产生一条广
8、播,接收到这条广播就能实现开机启动服务的功能;2.当锁屏或者点亮屏幕时就会产生一条广播,接收这条广播就可以实现一些暂停或者开启一些耗电进程的功能。3.当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;4.当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度;2.3注册2.3.1静态注册2.3.1.1概念静态注册是在AndroidManifest.xml文件中配置的。2.3.2动态注册2.3.2.1概念动态注册需要在代码中动态的指定广播地址并注册。2.3.2.2需要注意的事项RegisterReceiver是android.c
9、ontent.ContextWrapper类中的方法,Activity和Service都继承了ContextWrapper,所以可以直接调用。在实际应用中,我们在Activity或Service中注册了一个BroadcastReceiver,当这个Activity或Service被销毁时如果没有解除注册,系统会报一个异常,提示我们是否忘记解除注册了。所以,需要在特定的地方执行解除注册操作:生命周期的onDestroy()。有部分广播接受者,涉及到用户的敏感内容,需要在权限文件中声明。如开机完成的广播,用户电量变化的广播,用户网络状态发生改变的广播2.3.3生命周期1.广播接收者的生命周期是非常
10、短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁2.广播接收者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框3.最好也不要在广播接收者中创建子线程做耗时的工作,因为广播接收者被销毁后进程就成为了空进程,很容易被系统杀掉4.耗时的较长的工作最好放在服务中完成3Service3.1概念服务是看不到界面的,,就是一个没有界面的Activity, 并且长期在后台运行的一个组件.。3.2为什么用服务?进程优先级, 回收时是从51, 从低到高Foreground process 前台进程Visible process 可视进程Service
11、 process 服务进程Background process 后台进程Empty process 空进程回收的优先级: 先回收空进程, 一个一个回收的, 当内存够用时, 不再回收空进程. 如果空进程回收完毕后, 内存还是不够用时, 继续向上一个一个的回收后台进程. 依次类推.当系统内存不够用时, 需要回收服务进程时, 当系统内存又够用时, 会重新启动服务. 当用户去手动的把服务关闭时, 服务不会再重启了3.3作用由于ANR对Activity和BroadcastReceiver响应时间的限制(Activity对事件响应不超过5秒,BroadcastReceiver执行不超过10秒),使得在其中
12、都不适合执行较耗时操作,这样像网络、数据库、复杂计算这类耗时操作的执行就需要一个组件来承担。Service作为Android四大组件之一,其功能之一就是耗时操作的执行,主要功能如下:a. 执行需要长时间运行的操作,这个操作不与用户进行交互,如网络下载、大文件I/O、复杂计算、监听手机状态。b. 应用内或应用间数据通信,Android每个应用程序都在自己的dalvik虚拟机中运行,一个应用是不允许访问其他应用的内存信息的,为此Android引入了Content Provider在不同应用间共享数据,BroadcastReceiver广播信息给不同应用程序,但Content Provider更多用
13、于数据的共享,BroadcastReceiver广播的信息会被所有应用接收较耗费系统资源,对于两个应用间动态的进行交互还需要通过Service来完成。3.4启动方式3.4.1直接启动Activity开启完服务后就不管服务了. Activity和服务没有关系. startService开启的服务,只有stopService可以关闭3.4.2绑定启动绑定服务, 生命周期方法会执行: onUnbind - onDestory 服务销毁了.在activity中调用service中的方法.步骤:调用bindService方法绑定服务1.在Activity中定义一个连接桥的内部类, 会在bindService方法传递给service.2.在service服务中onBind方法中返回一个IBinder接口对象.3.在service类中定义一个IBinder的内部实现类, 在onBind方法返回.4.当onBinder方法返回完对象后, activity中连接桥里的onServic
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1