在另一个活动中停止从另一个服务启动的服务?

时间:2015-08-10 21:18:29

标签: android android-intent android-activity android-service android-service-binding

我有一个Sticky Service B,它是从服务A开始的。服务A在启动服务B后很快就完成了。我想从活动C中停止服务B.我该怎么办?

This链接提供了一种停止来自其他活动的服务的方法,但在这种情况下,服务是由活动启动的。

3 个答案:

答案 0 :(得分:0)

您可以考虑使用BroadcastReceiver将事件传递到服务并让它自行终止。

答案 1 :(得分:0)

您需要从您的活动中致电stopService。只要您在意图中提供有效的上下文,服务是由活动还是其他服务启动并不重要。如果服务未绑定到任何客户端,则调用stopService将停止服务。

stopService(new Intent(ActivityC.this, ServiceB.class));

如果您希望服务自行停止,请在服务中调用stopSelf()

答案 2 :(得分:0)

http://developer.android.com/reference/android/app/Service.html#onStartCommand(android.content.Intent, int, int)

1.create function handleStart()

<?php

function die_on_error($errno, $errstr, $errfile, $errline, $errcontext){
    echo "\n\nThere was an error. Today is a good day to die.";
    echo "\n\n\$errno: $errno";
    echo "\n\n\$errstr: $errstr";
    echo "\n\n\$errfile: $errfile";
    echo "\n\n\$errline: $errline";
    echo "\n\n\$errcontext: ";
    var_dump($errcontext);
    die();
}

if (is_null(set_error_handler('die_on_error'))){
    die("\n\nCould not set an error handler.");
}


2.override onStartCommand

private void handleStart(){
    //write your code here
}


3.call stopService

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub

    if(startId == Service.START_STICKY) {
        handleStart();
        return super.onStartCommand(intent, flags, startId);
    }else
        return  Service.START_NOT_STICKY;
}