Android 学习系列 - Application
Android Application
关于
安卓运行的时候会为每一个应用创建一个Application 类的对象,单例,每一个Application在一个单独的进程中运行。app 会存储系统相关的信息。
通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册
app 里边的所有activity都会在这个进程上上运行。 app 里边定义的全局变量共享给所有activity。
Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。
sample
public class MyApplication extends Application {
private static MyApplication singleton;private String val;// 单例模式public static MyApplication getInstance() { return singleton;}@Overridepublic void onCreate() { super.onCreate(); singleton = this; // 直到所有的activity都被kill,Application才会被销毁 // 所以这里的变量会直到最后才会被销毁 setValue('global varaibale');}public void setValue(String val) { this.val = val;}
}
public class MyActivity entends Activity {
private MyApplication app;
@Override public void onCreate(Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.main); // activity 中获取app 对象 app = (MyApplication) getApplication();}
}
app 的进程状态
android控制内存管理和进程的管理,app 任何时候都可能被kill掉,kill 的优先级由app的组件的优先级以及app间相互依赖的关系决定。
优先级决定等级树
- Active Process (Critical Priority)
用户在操作的component 属于这个process
为了保证 active process 能够正常运行,系统会通过kill 其他应用来腾出资源
具体包含如下组件
正在交互的activity
正在执行 onReceive 的BroadCaset Receiver
正在执行 onStart, onCreate, onDestroy 的Service
标记为在前台运行的service ?
Visible Process (High Priority)
通常为可见但是没交互的activity
Started Service Process (High Priority)
Background Process (Low Priority)
Empty Process (Low Priority)
app 处理onCreate 以外的其他状态函数
- onLowMemory
当后台进程被kill,当前仍然缺乏资源的情况会被调用
onTrimMemory
onConfigurationChanged
如果应用依赖系统设置,设置改变过后可以通过这个函数监听
关键字:activity, APP, process, oncreate
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!