2016-12-29 116 views
1

我有一個AlarmManager,每10分鐘顯示一個Toast。但是當os在後臺關閉應用程序時,所以我的AlarmManager不再工作。我必須做什麼?我的鬧鐘經理在我的應用程序在android中死亡後死亡

public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context con, Intent arg1) { 
     Global.ShowMessage(con, Global.GetCurrentDateTime()); 

    } 
} 

Manifest.xml

<receiver android:name=".MyReceiver" > </receiver> 
在主 Activity

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 

     Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.SECOND, 10); 

     long time = cal.getTimeInMillis(); 

     Intent i = new Intent(this, MyReceiver.class); 

     PendingIntent pi = PendingIntent.getBroadcast(this, 9854, i, PendingIntent.FLAG_UPDATE_CURRENT); 

     // am.set(AlarmManager.RTC_WAKEUP,time,pi); 

     am.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, 600 * 1000, pi); 
+0

由於它與主線程,這是正常的。你將需要使用一個服務,有更多的機會生存一些系統的清除,但沒有保證 – AxelH

+0

在你的接收器的清單聲明中,你需要'android:enabled =「true」'和'android:exported =「true」' –

+0

@ nickfriskel你有這個來源嗎?我一直認爲'exported'用於讓實體可以被其他應用程序看到,並且啓用非常明顯。它與一些系統kill信號無關,以恢復一些內存 – AxelH

回答

-2

追加此代碼清單中。

<receiver android:name=".MyReceiver" 
       android:enabled="true" 
       android:exported="true"> 

       <intent-filter> 
        <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       </intent-filter> 

      </receiver> 
+0

這隻會啓動應用程序(而不是每個設備)。沒有從系統中獲取一些內存的信號 – AxelH

+0

不,我不這麼認爲。我正在使用警報管理器作爲提醒。它工作正常。 –

+2

你是否理解你發佈的代碼?動作'BOOT_COMPLETED'在這裏爲這個動作創建接收器,這個動作在設備啓動時發送(有些設備使用不同的動作)。但這不會阻止系統殺死應用程序和接收器鏈接。除非你可以提供一些當然的來源,表明我錯了(這總是可能的;)) – AxelH

1

從官方documentation on the lifecycle

系統永遠不會直接殺死的活動。相反,它會殺死活動運行的過程,不僅會摧毀活動,還會摧毀流程中運行的所有其他活動。

但是,您可以創建一個Service,該活動不會被殺死。更具體地講,您希望在前臺運行服務,這將不被系統殺死作爲Services documentation

說對於一個具體的例子,我寧願讓谷歌引導你用這個[示例](https://developer.android.com/reference/android/app/Service.html#startForeground(int ,android.app.Notification))。

+0

我打電話給我的mainActivity.is中的alaram管理器嗎? –

+0

startForeground表明idont想要的 –

+0

@mn對於第一個評論,是的,這是鏈接到活動,以便將destoyed通知。對於通知,它是在那裏保持服務活着(並通知用戶這是活着的)。你可以創建一個後臺服務,但它可以像活動一樣被殺死。 – AxelH