调用stopService

时间:2015-12-15 15:11:26

标签: android service

我正在学习如何处理服务......我创造了一个小例子。 mainActivity向服务发送一个整数,服务使用该整数 作为循环中的最大迭代,如下面的代码所示。

问题是,当我调用stopService(intent)时,我仍然从下面发布的服务类中的循环中获得值。我想我打电话的时候 stopService()服务将被销毁

为什么要这样?

服务

public class MyService extends Service {

private final String TAG = this.getClass().getSimpleName();
final static String MY_ACTION = "MY_ACTION";

@Override
public void onCreate() {
    Log.w(TAG, "onCreate");

    super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.w(TAG, "onStartCommand");

    int max = intent.getIntExtra("MAX", -1);
    Log.v(TAG, "Act->Service : " + max);

    MyThread myThread = new MyThread();
    myThread.start();

    return Service.START_STICKY;
}

@Override
public IBinder onBind(Intent intent) {
    Log.w(TAG, "onBind");

    return null;
}

class MyThread extends Thread {
    @Override
    public void run() {
        // TODO Auto-generated method stub
        for (int i = 0; i < 10; i++) {
            try {
                Thread.sleep(1500);
                Intent intent = new Intent();
                intent.setAction(MY_ACTION);
                intent.putExtra("value", i);
                sendBroadcast(intent);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        stopSelf();
    }
}
}

1 个答案:

答案 0 :(得分:1)

  

当我调用stopService(intent)时,我仍然从下面发布的服务类中的循环中获得值

正确。那是因为线程仍在运行。

  

我认为当我调用stopService()时,服务将被销毁

是的。这不会神奇地导致你的线程停止。你开始了线程;你需要在onDestroy()中停止它。