如何停止我的线程,如果我这样做,我的服务也会停止吗?

时间:2016-11-17 03:21:50

标签: android multithreading

我目前正在处理我的第一个Android应用,但我遇到了问题。

我的应用程序应该在后台使用服务进行计数,并且我正在创建一个新线程来处理它。如果我不在服务的onDestroy()方法中停止该帖子,我的手机会给我留言#34;不幸的是,(我的应用程序)已停止。"每次我关闭应用程序。我需要以某种方式阻止它,我尝试使用:

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

然后在onDestroy()方法中中断它。 它有效,但它使我的应用程序非常快,所以我想知道它是否可以以任何其他方式完成,不会改变我的代码的功能。

此外,由于我的线程在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;
}

}

1 个答案:

答案 0 :(得分:0)

即使我的应用已关闭,有没有办法让我的服务继续运行?

你可以使用在后台运行的同步适配器甚至应用程序停止运行。 https://developer.android.com/training/sync-adapters/creating-sync-adapter.html