Think_mo

导航

 

本博文结合网络文章,主要供自己复习,如有引用他人文章,会加上链接

http://blog.chinaunix.net/uid-23392298-id-3269059.html

http://blog.csdn.net/maxleng/article/details/5621345 android应用程序启动的过程

1.Application只是一个松散的表征概念,没有多少实质上的表征。这个也就是个应用程序上下文状态,是一个极度弱化的概念。Application就是Activity,Service之类的组件上下文描述。Application并不是Android的核心概念,而Activity才是Android的核心概念。

2.在建立Actvitiy时,如果在应用进程端没有应用对象,系统在该过程中利用makeApplication建立一个Application对象,实例化"android.app.Application",建立一个应用程序上下文完成例如资源,package等信息管理。

一、android.app.Application类包含了4个公开的方法

void  onConfigurationChanged(Configuration newConfig)
void  onCreate()  //这里是整个程序是真正的入口点,不能放太多东西,它会直接影响到第一个Activity或者Service或者receiver
void  onLowMemory()


void  onTerminate() //这个函数是模拟一个过程环境,在真机中永远也不会被调用

二、SDK中的描述:

Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your AndroidManifest.xml's < application> tag, which will cause that class to be instantiated for you when the process for your application/package is created.

就是说application是用来保存全局变量的,并且是在package创建的时候就跟着存在了。所以当我们需要创建全局变量的时候,不需要再像j2se那样需要创建public权限的static变量,而直接在application中去实现只需要调用Context的getApplicationContext或者Activity的getApplication方法来获得一个application对象,再做出相应的处理。

 

三、Application的使用:

第一:写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application

第二:配置全局的Context 

<application

android:icon="@drawable/icon"

android:label="@string/app_name"

android:persistent="true" //表明本应用为常驻应用,被android:persistent修饰的应用会在系统启动之后被AM(ActivityManagerService)启动。这从某一程度来讲,这样做    会使得应用程序“杀不死” 详见:http://blog.sina.com.cn/s/blog_6f7ce0e60100viip.html

android:name=".DiskApplication"

android:debuggable="true">//当设置为true时,表明该APP在手机上可以被调试。默认为false,此时如果使用手机调试会报错 更多Application属性看http://www.cnblogs.com/pilang/archive/2011/04/20/2022932.html

这是默认情况下的配置文件:

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >

第三:使用Context

DiskApplication.getInstance()



以上为Android应用程序启动的Application,下面总结和收集一下Andorid的关闭

一、android.os.Process.killProcess 会让程序退出吗?

Process.killProcess 最终是调用 linux API kill() 发送 SIGKILL 信号。了解 Linux 编程的都知道,进行收到这个信息都会立即结束进程,Android 下不同的是 ActivityManager 一直监听者进程状态。如果发现进程被kill,会立即重启进行并重启之前状态对应的Activity、Service、ContentProvider等。这就是为什么我们调用Process.killProcess后,发现程序是重启了,而不是被kill了。

下面摘自某位朋友的总结:

System.exit(0)或者android.os.Process.killProcess(android.os.Process.myPid())这两种方法,但是我试过了,System.exit(0)这个根本不行,而android.os.Process.killProcess(android.os.Process.myPid())这个只能关闭当前的Activity,也就是对于一个只有单个Activity的应用程序有效,如果对于有多外Activity的应用程序它就无能为力了。http://yueguc.iteye.com/blog/939692

二、解决方法:

这个方法其实已经有很多博客提到过.2.2以前是可以.
2.2以后使用的是:public void killBackgroundProcesses(String packageName)
skd:
public void restartPackage(String packageName)
This method is deprecated.
This is now just a wrapper for killBackgroundProcesses(String); the previous behavior here is no longer available to applications because it allows them to break other applications by removing their alarms, stopping their services, etc



扩展阅读:

ActivityManager http://www.oschina.net/question/166763_45114  http://www.2cto.com/kf/201111/111395.html

 

 

posted on 2012-12-25 12:34  Think_mo  阅读(808)  评论(0)    收藏  举报