Android四大组件之Activity、Service

一、Activity
     activity在应用是一个界面,它加载布局文件显示各种UI元素。并且各个Activity可以相互跳转。
1、Activity生命周期
oncreate:在activity第一次被创建时候调用,在此完成Activity的初始化操作(设置布局,初始化视图,绑定事件)
onStart:在onCreate之后调用,此时处于不可见状态。
onResume:在activity变为可见时调用。执行完onresume之后,Activity就会请求AMS渲染它所管理的视图。此时的Activity一定位于返回栈的栈顶,并处于运行状态。
onPause:Activity从可见到不可见时调用。通常将一些耗时CpU操作释放掉,以及保存一些关键数据。
onStop:Activity在完全不可见时调用。它与onPause函数主要区别在于,如果新启动的Activity是一个对话框的Activity,那么onPause函数会得到执行,而onStop函数不执行。
onsDestroy:在销毁之前调用,之后为销毁状态。
onRestart:Activity被重新启动时调用,也就是由停止状态变为运行状态之前调用。



2、Activity的构成
Activity之下有一个PhoneWindow,这个PhoneWindow是window的实现类,然后window之下包含一个DecorView,DecorView实际上是页面的顶级视图,它从一些系统布局中加载。并且在运行时将开发人员设置给Activity的布局资源添加到系统布局的mContentParent中。这样用户布局就被添加到系统布局中。


DecorView 包含三部分(actionbar、标题栏区域、开发者设置的布局区域)


3、Activity的4种启动模式(standard,singleTop,singleTask,singleInstance)
   每个应用程序都是由一个或者多个Activity组成。android内部使用通过回退栈来管理activity实例。对于android来说,当前显示的Activity就在栈顶,当点击后退键或者点击应用上返回按钮,系统会将栈顶Activity出栈,此时下一个Activity就会变为栈顶显示到设备。
    一些特殊情况我们可能需要对activity实例做一些处理,例如,为了避免重复创建Activity,我们要求一个activity只有一个实例。
(1)standard(标准启动模式)
默认启动模式。可被多次实例化
(2)singleTop
只有activity在栈顶时,才不重新创建,并且调用原来activity的onIntent函数,其他与standard一样
(3)singleTask
此启动模式,任务栈中只能有一个改activity的实例。
如果任务栈中还没有该activity,创建一个实例放在栈顶。
如果已经存在,系统会销毁处在该activity 上的所有activity,最终让该activity 处于栈顶,同时回调onnewIntent()函数。
(4)singleInstance
此模式的activity会在一个独立的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他activity会自动运行于另一个任务栈中。当再次启动该Activity实例时,会重用已存在的任务和实例。并且会调用该实例的onNewIntent函数。
     和singleTask不同的是,同一时刻在系统中只会存在一个这样实例,而singleTask模式的activity是可以有多个实例的,只要这些activity在不同的任务栈中即可。


二、Service
service是android中实现程序后台运行的解决方案,它合适执行哪些不需要长期执行,并且要求长期运行的任务。默认不在子线程,同时执行在UI线程。除非开启到子线程执行。
  service运行部依赖界面,即使程序切换到后台,或者打开其他程序,service仍可以保持正常运行。当应用程序被杀掉时,所有依赖于该进程的service也会停止。
1、普通service
service生命周期:
oncreate
onStartComand
onDestory

一旦调用startService,服务启动起来,创建时首先会oncreate函数,然后回调onstartCommand函数。服务启动一直保持运行状态,直到stopService或stopSelf函数被调用。
 每次调用startService,onstartcommand就会执行一次,但实际每个服务只存一个实例。无论调用多少次startService函数,只要调用一次stop服务就停止。
2、intentService
将请求执行在子线程中,用户只需要复写onhandleIntent函数,并且在该函数完成自己的耗时操作即可。任务执行完毕会调用stopSelf自我销毁
适合短暂任务
3、运行在前台的service
service 默认是后台的,因此它优先级相对比较低。当内存不足时,它可能会被回收掉,可以将运行在前台。前台服务不仅不会被回收,还会在通知栏显示一条消息下拉状态可以看到详细信息。
startForeground





猜你喜欢

转载自blog.csdn.net/u011638706/article/details/51456987