Android自定义广播实现app完全退出
2017-06-29 10:44
801 查看
完全退出应用程序是一个基本的不能再基本的功能了,每个APP都会有这个功能,在java中这个功能很容易就实现了,这里就不多说了,但在android里,却好像没有那么容易,查阅了网上相关的资料和博客,大概有以下几种方法:
1.利用 PackageManager关闭所有本程序相关的进程,有人说2.2以上此法就失效了,没有亲自试过,不枉下断言,感兴趣的可以自己试.
2.利用java的exit()方法+android的killProcess(int pid); 小米3上亲测不可用,只能关掉当前Activity,可能在其它android系统中可以,但至少说明不通用.
3.创建一个List将所有新启动的Activity都加入到此列表中,在退出应用时,执行遍历此集合,将所有Activity关闭,可以勉强实现退出整个应用,缺点:代价太大,要在整个应用的生命同期中维护一个List,极易产生内存堆积,处理不好就是内存溢出,亲测会有内存堆积和溢出的现象,在小米1上溢出的更频繁.而且如果未关闭的Activity比较多的话,退出时会明显有一个卡的过程,用户体验不好.
以上三种方法要不是不通用,要不就是不好用,看到过一篇博客,推荐用广播的方式去关闭整个应用程序,思路就是为所有的Activity创建一个父类,只要在父类中注册一个自定义关闭应用广播即可实现,仔细想了一下这个方法是可行的,只要在基类中动态注册一个广播就可实现这个功能.以下是自己写的一个退出应用的demo,具体到不同的应用中,只要稍加调整就可以使用:
//自定义一个广播接收器,用来接收应用程序退出广播.
//应用程序中所有Activity的基类
//最后在要退出App的方法中添加以下发送广播代码即可.
这个方法是我认为目前最好的退出整个应用的方法,即不会产生内存堆积,退出整个应用的时间也很短,提高了用户体验,实现起来也很简单.
1.利用 PackageManager关闭所有本程序相关的进程,有人说2.2以上此法就失效了,没有亲自试过,不枉下断言,感兴趣的可以自己试.
2.利用java的exit()方法+android的killProcess(int pid); 小米3上亲测不可用,只能关掉当前Activity,可能在其它android系统中可以,但至少说明不通用.
3.创建一个List将所有新启动的Activity都加入到此列表中,在退出应用时,执行遍历此集合,将所有Activity关闭,可以勉强实现退出整个应用,缺点:代价太大,要在整个应用的生命同期中维护一个List,极易产生内存堆积,处理不好就是内存溢出,亲测会有内存堆积和溢出的现象,在小米1上溢出的更频繁.而且如果未关闭的Activity比较多的话,退出时会明显有一个卡的过程,用户体验不好.
以上三种方法要不是不通用,要不就是不好用,看到过一篇博客,推荐用广播的方式去关闭整个应用程序,思路就是为所有的Activity创建一个父类,只要在父类中注册一个自定义关闭应用广播即可实现,仔细想了一下这个方法是可行的,只要在基类中动态注册一个广播就可实现这个功能.以下是自己写的一个退出应用的demo,具体到不同的应用中,只要稍加调整就可以使用:
//自定义一个广播接收器,用来接收应用程序退出广播.
public class ExitAppReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (context != null) { if (context instanceof Activity) { ((Activity) context).finish(); } else if (context instanceof FragmentActivity) { ((FragmentActivity) context).finish(); } else if (context instanceof Service) { ((Service) context).stopSelf(); } } } }
//应用程序中所有Activity的基类
public class BaseActivity extends Activity { private ExitAppReceiver exitReceiver = new ExitAppReceiver(); //自定义退出应用Action,实际应用中应该放到整个应用的Constant类中. private static final String EXIT_APP_ACTION = "com.micen.exit_app"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerExitReceiver(); } private void registerExitReceiver() { IntentFilter exitFilter = new IntentFilter(); exitFilter.addAction(EXIT_APP_ACTION); registerReceiver(exitReceiver, exitFilter); } private void unRegisterExitReceiver() { unregisterReceiver(exitReceiver); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); unRegisterExitReceiver(); } @Override protected void onStart() { super.onStart(); } @Override protected void onStop() { super.onStop(); } }
//最后在要退出App的方法中添加以下发送广播代码即可.
Intent intent = new Intent(); intent.setAction(EXIT_APP_ACTION); sendBroadcast(intent);
这个方法是我认为目前最好的退出整个应用的方法,即不会产生内存堆积,退出整个应用的时间也很短,提高了用户体验,实现起来也很简单.
相关文章推荐
- android自定义广播实现app完全退出
- android自定义广播实现app完全退出
- android自定义广播实现app完全退出
- Android开发,完全退出APP的实现
- Android之利用广播实现完全退出程序功能
- Android 系列:单例模式实现一键退出APP
- Android完全退出APP,并且清除活动栈
- Android通知栏实现APP下载更新(DownloadManager和自定义Notification2种方式实现)
- 完全自定义Android对话框AlertDialog的实现(系统源码)
- android 利用广播实现程序的强制退出
- Android使用广播实现app开机自启动
- Android学习-使用单例模式实现一键退出APP
- Android自定义View——实现理财类APP七日年化收益折线图效果
- Android 自定义广播实现过程
- Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)
- Android按返回键程序仍在后台运行,并未完全退出和销毁,类似微信QQ等退出方式的实现-- moveTaskToBack
- android2.2使用广播机制进行完全退出
- Android完全退出App的一些问题
- Android实现点击两次back退出APP
- Android实现自定义广播