赞
踩
Android程序启动后的第一个入口点是Application的onCreate():
public class MyApplication extends Application {
@Override
public void onCreate() {
Log.d(TAG, "这里是Android程序入口");
super.onCreate();
}
}
在Android3.1版本后,每个App都必须要有至少有一个Activity,Application的onCreate()之后系统会进入第一个Activity,该启动Activity在AndroidManifestxml中须用Intent Filter配置如下::
<activity android:name="xxxActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
此后便从Activity的onCreate(Bundle savedInstanceState)开始进入组件的生命周期。
由上图可知系统在App启动时会创建一个Application实例(单例),如果你实现了Application的子类如MyApplication(通常没有必要实现),则是创建MyApplication的实例。Application的生命周期贯穿整个App运行全过程,从App启动到App完全终止运行。如下图所示:
- onCreate():Application创建的时候调用
- onConfigurationChanged(Configuration newConfig):当配置信息改变的时候会调用,如屏幕旋转、语言切换时。
- onLowMemory():Android系统整体内存较低时候调用,通常在这里释放一些不重要的资源,或者提醒用户清一下垃圾,来保证内存足够而让APP进程不被系统杀掉。它和OnTrimMemory中的TRIM_MEMORY_COMPLETE级别相同。
- onTrimMemory(int level):Android 4.0 之后提供的一个API,用于取代onLowMemory()。在系统内存不足的时会被调用,提示开发者清理部分资源来释放内存,从而避免被 Android 系统杀死。详见《Android代码内存优化建议-OnTrimMemory优化》
- onTerminate():Application结束的时候会调用,由系统决定调用的时机
MyApplication通常可用来在onCreate()中完成下列工作
Activity Process
活动进程,也叫前台进程。Android会尝试通过回收各种资源来保证其运行状态。此类进程数量少,通常是最后被结束掉的。活动进程包含下面几种情况:
— 进程持有一个正在与用户交互的Activity(这个Activity的onResume()方法被调用)。
— 进程持有一个Service,这个Service处于这几种状态:①Service与用户正在交互的Activity绑定。②Service是在前台运行的,即它调用了 startForeground()。③Service正在执行它的生命周期回调函数(onCreate(), onStart(), or onDestroy())。
— 进程持有一个BroadcastReceiver,这个BroadcastReceiver正在执行它的 onReceive() 方法。
Visible Process
可见进程,如果一个进程不含有任何前台活动的组件,不可与用户交互,但仍在屏幕上可见。可见进程包含下面几种情况:
—进程持有一个Activity,这个Activity不在前台,但是仍然被用户可见(处于onPause()调用后又没有调用onStop()的状态)。
—进程持有一个Service,这个Service和一个可见的或者活动的Activity绑定。
Started Service Process
启动后的服务进程,该服务进程在没有可视化界面的情况下持续运行时。
Background Process
后台进程,持有一个用户不可见的Activity(Activity的onStop()被调用,但是onDestroy()没有调用)的状态。通常有很多后台进程在运行。它们被保存在一个LRU(最近最少使用)列表中来确保拥有最近刚被看到的Activity的进程最后被杀死。
Empty Process
空进程,不拥有入何活动组件的进程。为了改善整个系统的性能,Android会在内存中保留已经结束生命周期的应用程序,以便这些App能够快速启动。
➤ Android按照上述优先级来结束一个进程,系统在内存不够用时,会从优先级等级低的开始杀死进程(1~5级,由高到低),以便为更高等级的进程腾出宝贵的内存空间。
➤ 同一个应用的所有组件在默认情况下都运行在同一个进程中,但也可以通过修改manifest文件中的android:process属性来指定该组件要运行在哪个进程,也可以让不同应用的组件们运行在同一个进程中,当然这些应用要共享同一个用户ID并且有相同的数字证书。
➤Android会尽可能高的估量一个进程的级别。比如,一个进程拥有一个可见状态的Activity和一个Service,这个进程会被认为是可见进程,而不是服务进程。
➤ 一个进程的级别可能会由于其它进程依赖于它而升高。一个为其它进程提供服务的进程级别永远高于使用它服务的进程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。