你如何正确终止服务,stopService()无法正常工作?

时间:2016-03-23 03:44:48

标签: android service background-process

无法终止在Android中创建的服务,它在stopService之后仍然运行。启动服务如下:

    Intent i = new Intent(this, MyService.class);
    startService(i);

Associated Manifest条目:

 <service android:name=".services.MyService" ></service>

MyService的要点将持续存在于多个活动中,所以我没有使用IntentService:

package com.sample.app.services;

public class MyService extends Service {

public static final String TAG = MyService.class.getSimpleName();
private Handler handler;

protected void onHandleIntent(Intent intent) {


    handler.post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(getBaseContext(), "MyService Intent...  Start", Toast.LENGTH_LONG).show();
        }
    });

}


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

    handler = new Handler();

            myProcessing();

    //  This will cause the service to hang around
    return (START_STICKY);
}


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

@Override
public void onDestroy() {
    super.onDestroy();

    }
}

在各种活动中甚至在上面的onDestroy()中尝试过,在super.onDestroy()之前;上面我尝试了以下内容:

        Intent i = new Intent(this, MyService.class);
    stopService(i);

MyService继续运行。我相信根据定义,服务是一个单身人士。

1 个答案:

答案 0 :(得分:4)

如果你想停止服务,有两种方法可以做到,

1)在服务类中调用stopself()。

2)使用stopService()。

在你的情况下,说你的服务类是在一个不同的包中(即使它在同一个包中也没关系),你最好为你的服务使用一个意图过滤器,这样可以很容易地停止和启动像这样的服务以下。

<service android:name=".services.MyService" android:enabled="true">
        <intent-filter android:label="@string/myService" >
            <action   android:name="custom.MY_SERVICE"/>
        </intent-filter>
    </service>

并将其添加到您的服务类

public static final String ServiceIntent = "custom.MY_SERVICE"

然后您可以像下面一样启动或停止服务。

startService(new Intent(MyService.ServiceIntent));
stopService(new Intent((MyService.ServiceIntent));

希望这有用。三江源