2016-11-17 20 views
1

私は現在、最初のアンドロイドアプリを開発中で、問題が発生しました。スレッドを停止するにはどうしたらいいですか?

私のアプリはサービスを使用してバックグラウンドでカウントされているはずです。それを処理する新しいスレッドを作成しています。私のサービスのonDestroy()メソッドでスレッドを停止しないと、私の電話は私に "残念なことに(私のアプリ)が停止しました"というメッセージを表示します。私はアプリを閉じるたびに。私は何とかそれを停止する必要がある、と私は使用してそれを実行しようとしました:

while(!Thread.currentThread().isInterrupted()){ 
     **my code** 
}: 

そして、onDestroy()メソッドでそれを中断します。 それは動作しますが、それは私のアプリケーションのカウントが非常に速くなるので、私のコードのfunctionaliyを変更しない他の方法で実行できるかどうかを知りたいと思います。

また、私のスレッドはonDestroyメソッドで停止するので、私のサービスも停止すると思います。私のアプリケーションが閉じられていても、サービスを実行し続ける方法はありますか?ここで

は私のコードです:

public class CounterService extends Service { 
private Handler handler; 
private int time = -1; 
private boolean isActive; 
private Intent timeBroadcaster; 
private Runnable counter; 
private Thread serviceCounter; 

@Override 
public void onCreate(){ 
    super.onCreate(); 
    handler = new Handler(); 
    timeBroadcaster = new Intent(); 
    timeBroadcaster.setAction("EXAMPLE_BROADCAST"); 
    counter = new Runnable() { 
     @Override 
     public void run() { 
       isActive = ((PowerManager) getSystemService(Context.POWER_SERVICE)).isInteractive(); 
       if (isActive) { 
        handler.postDelayed(this, 1000); 
        time += 1; 
       } else { 
        if (time > 5) { 
         //log 
        } 
        time = 0; 
        handler.postDelayed(this, 1000); 
       } 
       timeBroadcaster.putExtra("counter", time); 
       sendBroadcast(timeBroadcaster); 
      } 
    }; 

    serviceCounter = new Thread(counter); 
    serviceCounter.start(); 

} 

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


    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onDestroy(){ 
    //serviceCounter.interrupt(); 
} 

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

}

答えて

関連する問題