Android 利用Intent启动另一个app应用时,一个崩溃的问题

今天在做Launcher项目时,需要显示所有app,并且点击调用,在调用时,遇到一个崩溃问题。在此做一记录。

问题:在本地写的一个demo应用,里面有一个bug,点击这个demo应用,应用崩溃。在launcher应用中也点击调用这个demo应用,demo应用崩溃后,我的launcher应用也跟着崩溃。但是异常日志报了一些其它的错误 ,我这里的错误是

 Activity com.example.XXX .MainActivity has leaked IntentReceiver com.example.XXX.xxxView tha was originall registered here.Are you missing a call to unregisterReceiver()?

由于我的launcher程序中有用到Broadcast,所以我把所有注册Broadcast和unregisterReceiver的地方全部注释掉,但是问题依然没有解决,还是会导致我的launcher应用崩溃。所以继续查找原因后发现,在日志中,有两行黄色的日志,

PID:1696 , TID:4083 , Application  : system_process   Tag : ActivityManager  

Text : Force finishing activity 1 com.example.demo/.MainActivity

PID:1696 , TID:4083 ,Application  : system_process   Tag : ActivityManager  

Text : Force finishing activity 2 com.example.XXX/.MainActivity

PID:27009, TID:27009 ,Application  : com.example.demo   Tag :Process

Text : Sending signal.  PID:27009 ,SIG:9

PID:1696 , TID:4083 ,Application  : system_process   Tag : ActivityManager  

Text :Process com.example.vibrator (pid 27009) has died

原因是:

写代码中为了调试方便,我并没有在mainfest.xml中将属性设置为  launcher   中的android.intent.category.HOME

当demo程序崩溃后,由系统manager杀死了demo进程,同时,也将调用这个app的进程跟着杀死,导致我的lanucher崩溃。

由于我的程序是一个launcher程序,故我在mainfest.xml文件中将程序设置为launcher,再进行运行,这时,程序并没有退出。日志如下

PID:1696 , TID:4083 , Application  : system_process   Tag : ActivityManager  

Text : Force finishing activity 1 com.example.demo/.MainActivity

这里只打印了一次,说明,系统并没有杀死我的launcher程序。

分析:当一个应用利用intent调用启动另一个进程的app时,如果这个app崩溃,系统会自动检测调用它的程序是不是一个launcher程序,如果是,那么就不将这个调用它的程序杀死,如果不是,则将调用者的进程也杀死。

           对于跨进程通讯,这里不做分析,原因是  跨进程通讯是通过aidl调用Service接口来进行通讯,同时系统架构中设有程序保活功能。故即使调用另一个进程来通讯,即使它有bug,也不会造成本app跟着崩溃。(注:这里我也不懂,只是领导跟我这样解释的)

猜你喜欢

转载自blog.csdn.net/new_lichungang/article/details/83585426