2010-04-24 68 views
1

我開發了一個應用程序(稱爲即時按鈕),該應用程序具有小部件功能。此小部件使用PendingIntent作爲小部件的onClick。Wndingget中的PendingIntent + TaskKiller

我的PendingIntent的代碼是這樣的:

Intent active = new Intent(context, InstantWidget.class); 
    active.setAction(String.valueOf(appWidgetId)); 
    active.putExtra("blabla", blabla); //Some data 

    PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); 

    actionPendingIntent.cancel(); 
    actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); 

    remoteViews.setOnClickPendingIntent(R.id.button, actionPendingIntent); 

的的onReceive得到的意圖,並做一些東西用的MediaPlayer類重現聲音。

我從一些用戶那裏得知小部件在一段時間後停止工作,並且我發現一些研究是因爲任務殺手。看起來,當你殺死TaskKiller中的應用程序時,PendingIntent將從內存中刪除,所以當你點擊這個小部件時,它不知道該怎麼做。

有沒有解決方案?我的代碼是錯誤的或者是PendingIntent的默認行爲?有什麼我可以用來避免TaskKiller阻止我的小工具工作?

問候。

+0

我沒有任何任務殺手的問題,但你的代碼是我需要什麼弄清楚如何PendingIntents工作然後讓它們爲我的小部件的多個實例及其關聯的通知工作。謝謝! – gordonwd 2012-05-04 16:12:12

回答

7

有沒有解決方案?

要求你的用戶不要使用任務殺手。或者,等待未來的Android版本關閉任務殺手漏洞。

是我的代碼錯了,要麼就是它的 的 的PendingIntent的默認行爲?

你的代碼可能很好。任務殺手使用的黑客幾乎可以清除所有的東西,所以我對這種行爲並不感到驚訝。

有什麼我可以使用,以避免 的TaskKiller從 停止我的小部件的工作?

不是。你的用戶 - 那些至少不是完全愚蠢的人 - 有希望學會更多地意識到他們使用任務殺手的影響。目前,沒有明智的防禦任務殺手應用程序。

0

我有同樣的問題,在應用程序被解僱時,一個小部件中的掛起的意圖不再連接到他們的活動。創建,取消和重新創建工作,但您也可以指定取消當前標誌,以便您不必顯式調用取消,因爲系統會爲您執行取消。 當您創建掛起的意圖,而不是使用

PendingIntent.getBroadcast(context, 0, active, 0); 

使用

PendingIntent.getBroadcast(context, 0, active, PendingIntent.FLAG_CANCEL_CURRENT);