1

当我收到消息时,我需要将活动放在前面。我使用以下代码:

public void BringToFront()
{
    Intent intent = new Intent();
    intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
    intent.setClass(getApplicationContext(), getClass());
    startActivity(intent);
}

当我将活动置于顶部时,即使该活动未被操作系统杀死,先前的数据也会丢失。有没有办法在不丢失数据的情况下恢复活动,或者我无论如何都需要恢复数据?

谢谢

4

2 回答 2

1

你的代码不起作用。您的 Activity 仅在其位于前面时才处于活动状态。如果不在前面,则无法处理,因此您的方法将永远不会被调用。Activity 应该始终保存它想要保留的数据,无论是在 onSaveInstanceState 中还是在数据更改时。有很多方法可以在活动之间保存数据。如果您希望您的活动位于前面,则必须关闭所有位于它之上的活动。如果您再次需要这些活动,您应该让他们保存数据,并使用新数据再次启动它们。

我建议您阅读有关活动如何工作的文档....

于 2012-06-13T07:24:44.743 回答
0

只需根据您的情况在您的活动中使用此方法即可。它会起作用的。

protected void moveToFront() {
        if (Build.VERSION.SDK_INT >= 11) { // honeycomb
            final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
            final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);

            for (int i = 0; i < recentTasks.size(); i++) 
            {
                   Log.d("Executed app", "Application executed : " 
                           +recentTasks.get(i).baseActivity.toShortString()
                           + "\t\t ID: "+recentTasks.get(i).id+"");  
                   // bring to front                
                   if (recentTasks.get(i).baseActivity.toShortString().indexOf("Your app pckg name") > -1) {                     
                      activityManager.moveTaskToFront(recentTasks.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME);

               }
        }
    }
}

您还需要在清单中添加以下权限。

<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
于 2014-07-08T10:28:01.317 回答