2016-11-17 48 views
1

我目前正在對我的第一個Android應用程序,我已經遇到一個問題。如何阻止我的線程,如果我的服務也停止了,我會怎麼做?

我的應用程序應該使用一個服務在後臺進行計數,我創建一個新的線程來處理這個問題。如果我不停止我的Service的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; 
} 

}

回答

相關問題