有一些应用程序可以在其中的任何位置注销。例如您登录然后浏览。您使用操作栏或菜单按钮来注销。我可以在那一刻调用finish(),但它会弹出最后一个活动。即使我将用户转移到Home Activity,堆栈仍保留在内存中。有什么方法可以销毁剩余的堆栈吗?销毁活动堆栈
Q
销毁活动堆栈
0
A
回答
2
要做到这一点,最简单的办法就是清除栈回你的家或第一次活动,并通过标识符说要退出该应用程序。例如:
public class ActivityOne extends Activity {
public static final String FINISH_THIS = "FINISH_THIS";
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if(intent.hasExtra(FINISH_THIS)) {
finish();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getIntent().hasExtra(FINISH_THIS)) {
finish();
}
}
}
public class ActivityTwo extends Activity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.logout) {
Intent intent = new Intent(this, ActivityOne.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(ActivityOne.FINISH_THIS, true);
startActivity(intent);
}
return true;
}
}
如果ActivityOne是你的堆栈的根和ActivityTwo是用户选择退出,开始扫清回ActivityOne将摆脱返回堆栈的意图的选项。如果您希望在注销时退出该应用程序,则可以像使用FINISH_THIS那样传递额外的信号来指示完成根/家活动。
另一种方法是在调用finish()
之前调用setResult(FINISH_THIS)
其中FINISH_THIS是一个int标识符。然后在堆栈中的所有其他活动中,您将覆盖onActivityResult
并检查结果以查看是否需要完成该活动。如果是这样,你再次设置结果并继续传递下去。
使用我在开始概述的intent方法是清除堆栈的首选方法,因为它不依赖菊花链连接结果,但两个选项都工作得很好。
0
一个快速和肮脏的方法来做到这一点将onResume验证你仍然登录,如果不是,那么完成它。这样,如果他们回击,它会关闭每个活动,试图打开它们。这还会阻止某人在您期望关闭时使用应用管理器重新输入您的活动。
相关问题
- 1. 销毁活动堆栈
- 2. 我应该管理活动堆栈还是允许活动被销毁?
- 3. android:用于销毁的堆栈跟踪
- 4. 活动堆栈
- 5. 当内存不足时,android会销毁个人活动还是整个堆栈?
- 6. 无法销毁活动... java.lang.NullPointerException:observer
- 7. java.lang.IllegalStateException:(活动已被销毁)
- 8. 如何销毁活动?
- 9. Android活动堆栈
- 10. 如何在注销时销毁活动?
- 11. 启动活动将堆栈
- 12. Android-恢复活动中的服务并销毁它们销毁
- 13. 替换活动堆栈中的活动
- 14. android插入活动堆栈
- 15. 活动堆栈未清除
- 16. Android活动堆栈管理
- 17. Android中的活动堆栈
- 18. 清除活动堆栈android
- 19. 活动堆栈,singleTask,导航
- 20. 3活动堆栈情况
- 21. 活动堆栈状态
- 22. 活动堆栈管理
- 23. Android活动堆栈问题
- 24. saveInstanceState堆栈在活动中
- 25. Android中的活动堆栈
- 26. Android弹出活动堆栈
- 27. Android:搬运活动堆栈
- 28. 完成堆栈活动
- 29. 卸下活动从堆栈
- 30. 活动堆栈或碎片?