2017-01-06 3 views
2

サービスをアンドロイドで作成しました。サービスを使用してタスクを繰り返し実行します。つまり、サービスは死ぬべきではなく、繰り返しタスクを実行する必要があります。ただし、サービスはタスクを1回だけ実行した後、強制終了されます。バックグラウンドで繰り返しタスクを実行する方法。繰り返しサービスを使用して、いくつかのタスクを実行する方法 私の現在のコードは - >Android:アンドロイドサービスを使用して繰り返しタスクを実行することができません

public class SyncService extends Service { 

    private Looper mServiceLooper; 
    private ServiceHandler mServiceHandler; 


    @Override 
    public void onCreate() { 
// Start up the thread running the service. Note that we create a 
// separate thread because the service normally runs in the process's 
// main thread, which we don't want to block. We also make it 
// background priority so CPU-intensive work will not disrupt our UI. 
     HandlerThread thread = new HandlerThread("ServiceStartArguments", Process.THREAD_PRIORITY_BACKGROUND); 
     thread.start(); 

// Get the HandlerThread's Looper and use it for our Handler 
     mServiceLooper = thread.getLooper(); 
     mServiceHandler = new ServiceHandler(mServiceLooper); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Toast.makeText(SyncService.this, "servicestarting", Toast.LENGTH_SHORT).show(); 


     Message msg = mServiceHandler.obtainMessage(); 
     msg.arg1 = startId; 
     mServiceHandler.sendMessage(msg); 

     // If we get killed, after returning from here, restart 
     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     // We don't provide binding, so return null 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     Toast.makeText(SyncService.this, "service done", Toast.LENGTH_SHORT).show(); 
    } 

    // Handler that receives messages from the thread 
    private final class ServiceHandler extends Handler { 
     public ServiceHandler(Looper looper) { 
      super(looper); 
     } 

     @Override 
     public void handleMessage(Message msg) { 
     Toast.makeText(SyncService.this, "repeatedly perform some task", Toast.LENGTH_SHORT).show(); 

     //constantly perform task here 

     } 
    } 
} 

答えて

2

あなたはハンドラにメッセージを1つだけ送信します。そのメッセージは一度処理されます。ハンドラは同じメッセージを再び返すことができますが、遅延はありません。これは良い考えではありません。メインスレッドをデッドロックします。繰り返し何かをする最善の方法は、スレッドをスピンオフし、スレッドのRunnableを永久にループさせてスレッドで実行することです。

関連する問題