标签:
了解Android系统的进程优先级的变化方式
1.Android系统一般是运行在资源受限的硬件平台上,因此资源管理对Android系统很重要
2.为了保证高优先级程序正常运行,可以在无任何警告的情况下终止低优先级程序,并回收其使用的系统资源,因此,Android程序并不能完全控制自身的生命周期,而是由ANdroid系统进行调度和控制的
3.Android系统尽可能地不主动去终止应用程序,即使生命周期结束的程序也会保存在内存中,以便再次快速启动
4.但在内存紧张时,系统会根据进程的优先级清除进程,回收系统资源
Android系统中的进程优先级:
前台进程——>可见进程——>服务进程——>后台进程——>空进程
(高优先级) ( 中优先级 ) ( 低优先级 )
前台进程:是Android系统中最重要的进程,是与用户正在交互的进程
可见进程:指部分程序界面能被用户看见,却不在前台与用户交互,不响应界面时间的进程
服务进程:一个包含已启动服务的进程就是服务进程。服务进程没有用户界面,不与用户直接交互,但能够在后台长期运行,提供用户关心的重要功能(例如播放MP3文件或从网络下载数据)
后台进程:如果一个进程不包含任何已经启动的服务,而且没有任何用户可见的Activity,则这个进程就是后台进程(例如一个仅有Activity组件的进程,当用户启动了其他应用程序使这个进程的Activity完全被遮挡,则这个进程便成为了后台进程)
空进程:空进程就是不包含任何活跃组件的进程(例如一个仅有Activity组件的进程,当用户关闭Activity后,这个进程就成为了空进程)
注:
进程的优先级取决于所有组件中的优先级最高的部分(例如在进程中同时包含部分可见的Activity和已经启动的服务,则该进程是可见进程而不是服务进程),
进程的优先级会根据与其他进程的依赖关系而变化(例如进程A的服务被进程B调用,如果调用前进程A是服务进程,进程B是前台进程,则调用后进程A也具有前台进程的优先级)
Android组件
1.Android应用程序由组件组成,组件是可以被调用的基本功能模块
2.Android系统利用组件实现程序内部或程序间的模块调用,以解决代码复用的问题
3.程序设计时,在AndroidManifest.xml中声明可共享的组件,声明后其他应用程序可以直接调用这些共享组件
4.Android允许共享组件被Android系统直接实例化,从而保证能够调用进程没有启动的共享组件(Android系统没有使用常见的应用程序入口(Main函数))
Android的四大组件
分别是:Activity、Service、BroadcastReceiver和ContentProvider
Activity:
是Android程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件(类似于窗体的概念)一个Activity是一个界面,是整个程序的门面,负责与用户交互(充当程序UI) 例:将Activity比作网站,网站里有很多网页(ACtivity),网页负责显示内容和接收用户数据
Service:
一般用于没有用户界面,但需要长时间在后台运行的应用,负责耗时较长的操作,没有图形化界面 (西游里的沙僧,脏活累活他干)
BroadcastReceiver:
是用来接收并响应广播消息的组件,广播接收器, 监听手机发生的一切事情(监听系统行为(没电,断网....)), 针对手机当中出现的各种情况作出相应的对策
ContentProvider:
是Android系统提供的一种标准的数据共享机制,应用程序可以通过ContentProvider访问其他应用程序的私有数据。向外暴露数据的方法,负责对外提供数据,并允许有需要的应用程序访问这些数据 (图书馆)
其他重要的组件:
Intent和IntentFilter:
是Android应用内不同组件之间的通信载体,Activity、Service、BroadcastReceiver三种组件之间的通信都以Intent作为载体
UI组件通用属性:
android: id 指定标识, 使用: @+id/<标识符代号> 例: android: id = "@+id/show"
Java中获取组件 : findViewById("id"); 例: findViewById(R.id.show);
android: layout_width 指定界面组件宽度.
android: layout_height 指定界面组件高度.
属性值: wrap_content 包裹内容 match_parent 与父容器具有相同宽(高)度
Activity:
简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Activity,如下设置
<activity
android:label="@string/app_name"
android:name=".MainActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Activity生命周期
Activity生命周期是指Activity从启动到销毁的过程,在这个过程中有4个状态:
活动状态、暂停状态、停止状态、非活动状态
1.活动状态:完全可见,正交互(当前Activity位于前台,用户可见,可以获得焦点)
2.暂停状态:部分可见,未交互(其他Activity位于前台,该Activity依然可见,只是不能获得焦点)
3.停止状态:不可见,未交互(该Activity不可见,失去焦点)
4.销毁状态:该Activity结束,或Activity所在的Dalvik进程被结束
一个Activity通常是一个单独的屏幕,一个程序通常有多个Activity,Activity生命周期是指Activity从启动到销毁的过程。系统中的Activity被一个Activity栈所管理。
当一个新的Activity启动时,将被放置到栈顶,成为运行中的Activity,前一个Activity保留在栈中,不再放到前台,直到运行中的Activity退出为止。
栈是先进后出的原则,那么当用户按Back键时,当前的这个Activity销毁,前一个Activity重新恢复。
Activity生命周期的7个方法和3个阶段:
7个方法(事件回调函数):
void onCreate(Bundle savedlnstanceState)
创建Activity时被回调,该方法只会被调用一次
void onStart()
启动Activity时被回调
void onRestart()
重新启动Activity时被回调
void onResume()
恢复Activity时被回调,onStart()方法后一定会回调onResume()方法
void onPause()
暂停Activity时被回调
void onStop()
停止Activity时被回调
void onDestroy()
销毁Activity时被回调,该方法只会被回调一次
覆盖onPause()的情形:用户正在玩一个游戏,此时有电话打进来,需要将当前(游戏)暂停,并保存该游戏的进行状态,此时可覆盖onPause()方法来实现.
接下来当用户再次切换到该游戏的进行状态时,onResume()会被回调,因此可以通过重写onResume()方法来恢复游戏状态.
随着Activity自身状态的变化,Android系统会调用不同的时间回调函数,
开发人员在事件回调函数中添加代码,就可以在Activity状态变化时完成适当的工作
Activity生命周期可以分为完全生命周期、可视生命周期和活动生命周期
完全生命周期:
从Activity建立到销毁的全部过程,始于onCreate(),结束于onDestroy().一般情况下,在onCreate()中初始化Activity所能使用的全局资源和状态,
并在onDestroy()中释放这些资源.例如,Activity中使用后台线程,则需要在onCreate()中创建线程,在onDestroy()中停止并销毁线程.
在一些极端的情况下,Android系统会不调用onDestroy(),直接终止进程.
可视生命周期:
Activity在界面上从可见到不可见的过程,开始于onStart(),结束于onStop(). onStrat()一般用来初始化或启动与更新界面相关的资源.
onStop()一般用来暂停或停止一切与更新界面相关的线程、计时器或Service等,因为在调用onStop()后,Activity对用户不再可见,更新用户界面也就没有意义了.
onRestart()函数在onStart()前被调用,用来在Activity从不可见变为可见的过程中进行一些特定的处理过程.因为Activity不断从可见变为不可见,再不可见变为可见,
所以onStart()和onStop()会被多次调用.另外,onStart()和onStop()也经常被用来注册和注销BroadcastReceiver.
活动生命周期:
此时Activity在屏幕最上层,并能够与用户进行交互的阶段,开始于onResume(),结束于onPause().
因为在Activity的状态变换过程中,onResume()和onPause()经常被调用,因此这两个函数中应该使用简单高效的代码.
标签:
原文地址:http://www.cnblogs.com/IceSea/p/4672755.html