0

我最近一直在製作Android應用程序.. 其中我使用了Pending Intent和Alarm Manager。 我需要有多個掛起的意圖,所以我正在使用FLAG_ONE_SHOT。報警管理器將按照提及的間隔發送廣播。還有,我正在使用intent的setAction()方法並將currentTimeMillis()作爲參數傳遞。我有相應的廣播接收器。問題是,一旦應用程序關閉,或從最近的托盤中刪除,廣播接收器不運行。 的代碼如下:待定意圖和報警管理器

  1. setAlarm:

    private void setupAlarm(int seconds) { 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    Intent intent = new Intent(getBaseContext(), OnAlarmReceive.class); 
    //PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    intent.setAction(Long.toString(System.currentTimeMillis())); 
    intent.putExtra("id", ID); 
    
    PendingIntent pendingIntent = PendingIntent.getBroadcast(ChatActivity.this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
    
    Log.e(TAG, "Setup the Alarm"); 
    
    Calendar calendar = Calendar.getInstance(); 
    calendar.add(Calendar.SECOND, seconds); 
    
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);} 
    
  2. 廣播接收機

    public void onReceive(Context context, Intent intent) { 
    
    String id = intent.getStringExtra("id"); 
    Log.e(TAG,"On the verge of deleting the message with id: "+id); 
    SQLiteDatabase database = context.openOrCreateDatabase("/sdcard/userlists.db", SQLiteDatabase.CREATE_IF_NECESSARY, null); 
    database.execSQL("DELETE FROM " + "MESSAGE" + " WHERE " + "id" + "= '" + id + "'"); 
    
    broadcaster = LocalBroadcastManager.getInstance(context); 
    intent = new Intent(COPA_RESULT); 
    broadcaster.sendBroadcast(intent);} 
    
  3. 的Manifest.xml

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

請幫幫我。即使應用已關閉,我也需要廣播公司來完成這項工作。

+0

使用'service'! –

+0

因此,如果不使用服務,我無法接收廣播? 如果是這樣,你能提供步驟嗎? –

回答

0

這是流程生命週期錯誤,其中,當應用程序進入後臺回收內存

您需要安排JobService接收工作應用程序是否處於活動狀態

系統可以殺死進程

,由工藝的官方document和應用程序生命週期

流程生命週期錯誤的一個常見示例是BroadcastReceiver ,它在其 BroadcastReceiver.onReceive()方法中接收到Intent時啓動線程,然後從 函數返回。一旦它返回,系統認爲BroadcastReceiver 不再處於活動狀態,因此,其主機進程不再需要 (除非其他應用程序組件處於活動狀態)。因此,系統 可能會隨時終止進程以回收內存,並且這樣做會終止在進程中運行的衍生線程。解決此問題的解決方案 通常是從 BroadcastReceiver安排JobService,因此係統知道在該過程中仍有活動工作 正在完成。

這裏是example你可以按照完成要求

+0

你明白了嗎? –

+0

是的......非常非常抱歉,遲到的回覆......但非常感謝你! –