在我的应用程序中,我总是希望用户从启动画面开始.例如,我的应用程序可能在后台打开,并弹出一些启动启动活动的通知.这应该终止所有以前正在运行的活动.
我通过存储所有正在运行的活动参考的列表来完成此操作.当启动启动时,它只是调用
for(runningActivity : runningActivitiesList) {
runningActivity.finish();
}
Run Code Online (Sandbox Code Playgroud)
此解决方案效果很好.但是,Android Studio在存储对活动的引用时会向我发出内存泄漏警告.
有人可以建议我一个更好的方法,以避免内存泄漏?
也许足够的是用清晰的堆栈启动Activity:
Intent intent = new Intent(context, clazz);
intent.setFlags(IntentCompat.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
尝试了所有其他选项,但唯一对我有用的是:
final Intent intent = new Intent(applicationContext, SplashActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| IntentCompat.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
return IntentCompat.makeRestartActivityTask(intent.getComponent());
Run Code Online (Sandbox Code Playgroud)
请注意:该解决方案也不是完整的证明。因为,当我通过 Google Play 商店打开我的应用程序时,即使应用程序的另一个实例在后台运行,它也会启动启动活动。因此,我最终得到了同一活动的 2 个实例。
归档时间: |
|
查看次数: |
243 次 |
最近记录: |