如何停止运行服务?

时间:2012-04-01 12:25:34

标签: android android-service

我有这个描述服务的代码:

public class navigation_web extends Service {

    Context context;

    public void navigation() {
        Cursor mCur = getContentResolver().query(Browser.BOOKMARKS_URI,
            Browser.HISTORY_PROJECTION, null, null, null);
        mCur.moveToFirst();
        if (mCur.moveToFirst() && mCur.getCount() > 0) {
            while (mCur.isAfterLast() == false) {
                Log.v("titleIdx",
                    mCur.getString(Browser.HISTORY_PROJECTION_TITLE_INDEX));
                Log.v("urlIdx",
                    mCur.getString(Browser.HISTORY_PROJECTION_URL_INDEX));
                mCur.moveToNext();
            }
        }
        // Browser.clearSearches(getContentResolver());
    }

    public void onCreate() {
        // Browser.clearHistory(getContentResolver());
        // Browser.clearSearches(getContentResolver());
        navigation();
        // super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

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

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

我可以使用

从活动中调用此服务
startService(new Intent(Finalv2Activity.this, navigation_web.class));

但我想在调用它之后停止此运行服务,以便我可以再次调用它。我怎样才能做到这一点。感谢

6 个答案:

答案 0 :(得分:36)

还有另一种称为stopService(Intent intent)的方法。 在服务中,您可以致电stopSelf()

答案 1 :(得分:29)

使用活动stopService()方法:

stopService(new Intent(ActivityName.this, ServiceClassName.class));

答案 2 :(得分:4)

stopService(Intent intent)是停止任何特定服务的方法

答案 3 :(得分:1)

android.os.Process.killProcess(android.os.Process.myPid());

答案 4 :(得分:0)

打电话给 stopService(new Intent(YourActivity.this, ServiceClassName.class));
详细了解https://developer.android.com/guide/components/services.html

中的服务

答案 5 :(得分:0)

补充@Makvin的答案。在服务之外停止服务

public static ActivityManager.RunningServiceInfo getRunningServiceInfo(Class serviceClass, Context context) {
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return service;
        }
    }
    return null;
}

之后

new Timer().schedule(new TimerTask() {
        @Override
        public void run() {
            final ActivityManager.RunningServiceInfo serviceInfo = getRunningServiceInfo(service, c);
            if (serviceInfo != null) {
                android.os.Process.killProcess(serviceInfo.pid); //Stop the running service
            }
        }
}, 200); 

我将killProcess放在另一个线程中,否则由于某种原因所有应用程序都被杀死。这样,当进程终止(不太糟糕)时,该应用程序将最小化,欢迎提出建议