把活动带到前面 - 我正在丢失数据

时间:2012-06-13 07:17:32

标签: android android-activity android-intent

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

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

当我将活动置于最前面时,之前的数据会丢失,即使活动未被操作系统杀死。有没有办法让活动恢复而不会丢失数据,或者我还需要恢复数据?

由于

2 个答案:

答案 0 :(得分:1)

您的代码不起作用。您的活动仅在其位于前面时才有效。如果它不在前面,则无法处理,因此永远不会调用您的方法。活动应始终在onSaveInstanceState或更改数据时保存要保留的数据。有许多方法可以在活动之间保存数据。 如果您希望自己的活动在前面,则必须关闭所有活动。如果您再次需要这些活动,则应让他们保存数据,然后使用新数据重新启动它们。

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

答案 1 :(得分: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" />