2012-01-18 19 views
1

沒有效果我有一個小部件從中我可以啓動兩個活動:FLAG_ACTIVITY_NEW_TASK小窗口

public final void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) { 

    // some stuff here 
    ... 

    Intent intent = new Intent(context.getApplicationContext(), B.class); 
    // forces intent update in pending intent 
    intent.setAction("NO CACHE: " + System.currentTimeMillis());    
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
    views.setOnClickPendingIntent(R.id.rlFrame, pendingIntent); 

    intent = new Intent(context.getApplicationContext(), A.class); 
    // forces intent update in pending intent 
    intent.setAction("NO CACHE: " + System.currentTimeMillis()); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
    views.setOnClickPendingIntent(R.id.ivWidgetIcon, pendingIntent); 

    // some stuff here 

} 

場景A:

  • 從部件開始活動A
  • 按HOME鍵
  • 從小部件開始活動B

結果:

這兩個活動都與作爲根的Activity A處於相同的任務。

情形B:

  • 起價插件
  • 按下HOME按鈕
  • 活動B從插件開始活動A

結果:

兩種活動都在同一以活動B作爲根的任務。

好像FLAG_ACTIVITY_NEW_TASK被完全忽略。我期望這兩項活動都是在不同的任務中開展的。任何想法?

+0

你有沒有答案?我一直試圖弄清楚這大概一年現在 – MobileMon 2012-11-14 16:43:26

回答

1

使用下列標誌

FLAG_ACTIVITY_MULTIPLE_TASK 
+0

嗯,以前見過這個。但是註釋「除非你正在實現你自己的頂級應用程序啓動器,否則不要使用這個標誌。」讓我想到不使用它。 – user1155504 2012-01-18 09:10:32

+0

爲什麼launchMode:singleTask不起作用? – user1155504 2012-01-18 09:48:39

+0

只有在這個應用程序中沒有任何任務啓動時才能使用。一旦任務被創建,它將使用相同的任務來啓動新的活動 – 2012-01-18 10:21:20

0

Here says:

如果傳遞給startActivity()的意圖包含FLAG_ACTIVITY_NEW_TASK標誌,系統會尋找不同的任務,以容納新的活動。通常,這是一項新任務。但是,它不一定是。如果已有與新活動具有相同親和力的現有任務,則該活動將啓動到該任務中。如果不是,它開始一個新的任務。

使用singletask也許可以解決您的問題。

0

PendingIntent documentation:

甲的PendingIntent本身是簡單地通過描述用於檢索它的原始數據的系統所維護的令牌的引用。這意味着,即使其擁有的應用程序的進程被終止,PendingIntent本身仍然可以從其他被賦予的進程中使用。如果稍後創建的應用程序重新獲取相同類型的PendingIntent(相同的操作,相同的Intent操作,數據,類別和組件,以及相同的標誌),它將會收到一個表示相同標記的PendingIntent(如果該標記仍然有效)因此調用cancel()將其刪除。

這意味着爲了讓它知道它有一個新的PendingIntent,至少有一個它正在看的東西必須有所不同。您的行爲與Intent不同,但與Intent行動相同。最簡單的改變可能是requestCode(見粗體)。

//一些東西在這裏 ...

意向意圖=新意圖(context.getApplicationContext(),B.class); //強制意圖更新待定意圖intent.setAction(「NO CACHE: 」+ System.currentTimeMillis());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pendingIntent = PendingIntent.getActivity(context,,intent,0); views.setOnClickPendingIntent(R.id.rlFrame,pendingIntent);

intent = new Intent(context.getApplicationContext(),A.class); // 在等待意圖中強制意圖更新intent.setAction(「NO CACHE:」+ System.currentTimeMillis()); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); pendingIntent = PendingIntent.getActivity(context,,intent,0); views.setOnClickPendingIntent(R.id.ivWidgetIcon,pendingIntent);

//一些東西在這裏

而且,在我的應用程序,Intent.FLAG_ACTIVITY_NEW_TASK被設置爲getActivity() flags參數。不知道這是否有所作爲。