2016-10-05 26 views
1

我必須在MyService.java類中連續執行一些任務。爲此,我使用Handler,但mHandler.postDelayed(this,40000);在給定時間後,不會被解僱。它在每秒之後被解僱。請幫我出處理程序不在延遲時間在我的後臺服務

public class SendMessageService extends Service { 

    private Handler mHandler = new Handler(); 
    private Runnable task; 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     registerReceiver(stopReceiver, new IntentFilter("com.android.STOP_HANDLER")); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     task = new Runnable() { 
      @Override 
      public void run() { 

       dosomething(); 
       mHandler.postDelayed(this, 40000); 
      } 
     }; 

     try { 

      mHandler.postDelayed(task, 40000); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return START_STICKY; 
    } 


    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     unregisterReceiver(stopReceiver); 
    } 

    private void dosomething() { 
     //perform my task 
    } 

    private BroadcastReceiver stopReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.d("receive","STOP"); 
      mHandler.removeCallbacks(task); 
     } 
    }; 
} 
+0

檢查日誌也許有在''try'塊catch'一個異常,處理程序沒有得到最初分配給它肯定會觸發任何事情 –

回答

0

我我的代碼更改爲這一點,它是工作

public class SendMessageService extends Service { 

     private Handler mHandler = new Handler(); 


     @Nullable 
     @Override 
     public IBinder onBind(Intent intent) { 
      return null; 
     } 

     @Override 
     public void onCreate() { 
      super.onCreate(); 

      registerReceiver(stopReceiver, new IntentFilter("com.android.STOP_HANDLER")); 
     } 

     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 



      try { 

       mHandler.postDelayed(task, 40000); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return START_STICKY; 
     } 


     @Override 
     public void onDestroy() { 
      super.onDestroy(); 
      unregisterReceiver(stopReceiver); 
     } 

     private void dosomething() { 
      //perform my task 
     } 

     private BroadcastReceiver stopReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       Log.d("receive","STOP"); 
       mHandler.removeCallbacks(task); 
      } 
     }; 


private Runnable task = new Runnable() { 
       @Override 
       public void run() { 

        dosomething(); 
        mHandler.postDelayed(this, 40000); 
       } 
      }; 
    } 
相關問題