2013-11-28 70 views
2

我的APP在收到ACTION_SCREEN_OFF時必須啓動一些耗時的工作,並且在作業仍在繼續時收到ACTION_SCREEN_ON時中斷作業。如何停止Handler在android中工作?

public class TimeConsumingWorkIntentService extends IntentService { 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     TimeConsumingWork(); 
    } 
} 

public class ScreenStatusReceiver extends BroadcastReceiver { 
    Intent intent = new Intent(mContext, TimeConsumingWorkIntentService.class); 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      mContext.startService(intent); 
     } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
      mContext.stopService(intent); 
     } 
    } 
} 

截止時間打印日誌,我覺得費時的工作仍在繼續停止TimeConsumingWorkIntentService(接收ACTION_SCREEN_ON時)。

爲什麼?

回答

3

使用

// Cancel the runnable

myHandler.removeCallbacks(yourRunnable);

好吧,那麼你可以做這樣的事情

Runnable r = new Runnable{ 
public void run(){ 
    if(booleanCancelMember != false){ 
     // within this you make the call to handler and work 
     // Since you block the call the handler wont get repeated 
    } 
    } 
} 
+0

感謝Arju。我之前嘗試過你的方法,它不適用於某些未知的原因(抱歉,我不記得原因)。我嘗試使用IntentService,它也不起作用。 – RoFF

+0

我剛更新了我的代碼:) –

0

你不能做到這一點這樣的。當你開始你的IntentService時,它將在單獨的工作線程上調用onHandleIntent()。那mehod然後叫TimeConsumingWork()。停止服務不會中斷工作線程的執行。它只是告訴工作線程,當它完成處理當前的Intent時,它應該停止。

你需要做的是讓你的TimeConsumingWork()方法定期查看是否應該停止。您可以通過設置static boolean變量來完成此操作,並讓TimeConsumingWork()定期檢查此變量並在設置後退出。

您無需致電stopService()就可以在IntentService上完成任務,因爲無用時它會自行停止。