android 后台运行清理,【Android】App在后台被清理后的终极应对手段——重启应用...

本文探讨了如何检测Android应用在后台被销毁的情况,并介绍了两种不同方法实现应用的重启,包括利用Intent和AlarmManager。然而,这种方法可能不具有一致性,并且在某些设备上可能不会完全重启App,甚至可能导致不良影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

检测App是否在后台期间被销毁

添加一个null值的Object标记对象到Application,并在App运行期间赋值一个非null任意对象,如果App在后台期间被OS销毁,则该对象会被清空(适用于static和非static类型)

但该Application对象不一定会从内存销毁(尤其定制化版本系统),当App进程被OS终止,并重新从最近运行列表中恢复时,Application的onCreate使用的对象引用可能依旧为进程终止前的Application地址,因此不可以此为依据判断是否被系统终止进程。

重启App

最终能否成功重启App依据所使用设备及其OS而定,非Android提供标准功能,不保证平台一致性体验,并且正常情况下不推荐重启App。

版本1.a 版本1.b(108/115 Votes)

Intent i = getBaseContext().getPackageManager()

.getLaunchIntentForPackage( getBaseContext().getPackageName() );

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(i);

这份代码会重演App启动过程,但 不会 重新初始化程序,因此static变量会保留上次运行的状态值。完全的重启App需要调用 System.exit(0)

版本2(172 Votes)

Intent mStartActivity = new Intent(context, StartActivity.class);

int mPendingIntentId = 123456;

PendingIntent mPendingIntent = PendingIntent.getActivity(context, mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);

AlarmManage+r mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);

System.exit(0);

4.3、4.4系统上,貌似表现为finish掉当前Activity并启动一个新的Activity覆盖在前一个Activity栈上,按Back键会回到上次启动的app。

System.exit(0); 貌似不起作用,应该使用 finish() 来做关闭。

部分设备无法表现出重启App行为。

System.exit(0); 会对多线程程序产生不可预料的恶性后果,尤其其他线程在操作I/O的时候。

杀死当前进程,也可使用 android.os.Process.killProcess(android.os.Process.myPid()) 实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值