2015-10-02 22 views
1

我有一個活動具有以下特殊性質表現活動通過的PendingIntent叫得到自動銷燬

<activity 
     android:name=".LightUp" 
     android:excludeFromRecents="true" 
     android:launchMode="singleInstance" 
     android:noHistory="true" 
     android:process=":listener" 
     android:taskAffinity="" > 
    </activity> 

設置這個活動裏面,我在安排AlarmManager使用此的PendingIntent調用本身在某個時間之後。 AlarmManager是必要的,因爲電話會在屏幕上顯示此活動時進入睡眠狀態,而且我不想持有喚醒鎖。

pendingIntent = PendingIntent.getActivity(this, 10, 
       new Intent(this, LightUp.class) 
       .setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT), 
       PendingIntent.FLAG_UPDATE_CURRENT); 

所以,當報警經理火災,我得到了新的意圖,onNewIntent()功能如常。這意味着即將進行同樣的活動。 問題是在onNewIntent後活動被破壞。即使我在onNewIntent絕對沒有代碼,我可以從日誌中看到,onDestroy無論如何都會被調用。

所以問題是爲什麼Destroy被調用?我能做些什麼來保持活動運行?

回答

0

看起來像我找到了罪魁禍首。導致此問題的屬性爲noHistory。 官方文件說

安卓noHistory ::無論是否活動應該從活動組中刪除,並完成(其完成()調用的方法),當用戶導航遠離它,它是不再可見屏幕上

嗯,從技術上說,我沒有離開屏幕,同時調用PendingIntent,怪異的完成被稱爲。在刪除noHistory後,它不會破壞。

+0

「當用戶離開它時」---我敢打賭,這意味着當onPause被調用時。所以是的,onPause在onNewIntent之前自動調用,這就是我猜測的原因 – anandbibek

0

試試這個

活動清單

<activity 
    android:name=".LightUp" 
    android:launchMode="singleTop" 
</activity> 

Java代碼的

Intent notificationintent = new Intent(context, LightUp.class); 
notificationintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
PendingIntent pIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), notificationintent, PendingIntent.FLAG_UPDATE_CURRENT); 

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    System.out.println("new intent received"); 
    // do what ever you want to do here 
} 
+0

感謝您的回答。我已經嘗試過了。不工作。編輯:仍然不是 – anandbibek

+0

你可以發佈你的代碼LightUp類 –

+0

代碼在這裏不相關。相信我我不打電話完成()我自己的任何地方 – anandbibek

0

試試這個: -

<activity 
    android:launchMode="singleTask" > 
</activity> 

默認情況下,如果您使用意圖調用某個活動,則即使另一個實例已在運行,該活動的新實例也將被創建並顯示。爲了避免這種情況,必須標記該活動,它不應該多次實例化。要達到此目的,您必須將活動的launchMode設置爲singleTask

+0

我已經說過,我正在越來越onNewIntent正確。所以它不是一個多實例問題 – anandbibek

+0

是的,但正如你所說'onDestroy()'正在調用,這意味着現有的實例正在被破壞,並且正在創建一個新的實例,因此我發佈了這個答案。 – Karthik

+0

如果你的問題沒有解決,你可以請不要在Intent中設置標誌'Intent.FLAG_ACTIVITY_REORDER_TO_FRONT',因爲你已經在Manifest文件中設置了'android:excludeFromRecents =「true」' – Karthik