我最近完成了一个应用程序并开始为CPU&内存使用情况并遇到内存泄漏:
在一个简单的3选项卡应用程序中,每个选项卡都有不同的功能,我在Tab3上有一个按钮,它将用户和messageId一起发送回Tab1。与Tab1相关联的活动捕获此额外内容并显示该消息(如果存在)。请参阅下面的Tab3中的按钮:
public void onClick(View arg0) {
Intent notificationIntent = new Intent(getApplicationContext(), TabContainerActivity.class);
notificationIntent.setAction("com.test.notify.MESSAGE");
notificationIntent.putExtra(MessageBean.MESSAGE_ID, messageId);
startActivity(notificationIntent);
}
选项卡容器TabContainerActivity.class
将Extras
复制到子操作。它还具有捕获与意图一起发送的Action
的逻辑,如果找到,则用于确定将哪个选项卡设置为当前:
if(getIntent().getExtras() != null ) intent.putExtras(getIntent().getExtras());
if(getIntent().getAction().equalsIgnoreCase("com.test.notify.MESSAGE"))
{
tabHost.setCurrentTab(0);
}
else if(getIntent().getAction().equalsIgnoreCase("com.test.notify.SETTINGS"))
{
tabHost.setCurrentTab(1);
}
...etc...
使用上面的代码,你可以正常地在标签之间移动,你也可以点击Tab3中的一条消息,并在Tab1中完整显示 - 太棒了!将来可以轻松修改代码,以允许其他应用程序将MessageID传递给第一个标签活动,Wonderfu!
然而 - 此行为现已证明:
TabContainerActivity
活动]] TabContainerActivity
活动]] 希望你能看到问题!您可以通过back
遍历每个活动,将它们从堆栈中剥离出来,但由于问题的递归性质,您可以继续导航,每次传递创建一个新活动,直到OutOfMemory异常为止。 / p>
所以,对于这个问题;
我希望Tab1&#39s活动中包含的功能在Tab变得可见时运行(在这种情况下,加载一条消息),所以我希望将它作为一个Activity保存。这样说,导航到我希望它是堆栈中唯一的Tab Activity。我怎样才能做到这一点?
任何帮助和讨论都将不胜感激!
答案 0 :(得分:1)
使用此
public void onClick(View arg0) {
Intent notificationIntent = new Intent(NotifyService.getInstance(), TabContainerActivity.class);
notificationIntent.setAction("com.test.notify.MESSAGE");
notificationIntent.putExtra(MessageBean.MESSAGE_ID, messageId);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(notificationIntent);
}
我认为只使用.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
来表示您再次启动活动的意图将有助于您获得所需的结果。