2012-06-13 51 views
1

當我收到消息時,我需要將活動放在前面。我使用下面的代碼:將活動放在前面 - 我正在丟失數據

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

當我以前的數據都將丟失在上面活動,雖然活動不是由OS死亡。有沒有辦法在不丟失數據的情況下恢復活動,或者我需要恢復數據?

謝謝

回答

1

您的代碼不起作用。您的活動只有在前面時纔有效。如果它不在前面,它不能處理,所以你的方法永遠不會被調用。一個Activity應該總是保存要保存的數據,不管是在onSaveInstanceState中,還是在數據發生變化時。有很多方法可以在活動之間保存數據。 如果您希望您的活動在前面,則必須關閉所有在其之上的活動。如果你再次需要這些活動,你應該讓他們保存他們的數據,並用新數據再次啓動它們。

我建議你閱讀活動是如何工作的文檔....

+0

當我從其他應用程序收到消息時,會明確調用此方法。代碼運行並向我顯示活動,但所有字段均爲空白。 – Simon

+0

這是因爲活動的新副本由置於堆棧頂部的startActivity創建。您可以讓您的活動爲單一實例,但實際上,這不是構建Android應用程序的方式.... – Christine

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" />