按Home键后运行Android服务

时间:2010-11-25 03:34:17

标签: android

我有一个Android服务,使用StartService()在OnCreate中创建应用程序的第一个Activity。我需要这个服务在应用程序的整个生命周期中运行,即应用程序中的所有活动。但是,用户按下Home键或Back按钮后,服务不应消耗资源。除了在所有活动的onPause()方法中停止服务之外,还有其他优雅方法吗?

2 个答案:

答案 0 :(得分:2)

您可以在onResume中调用bindService,而在onPause中调用unbindService,而不是使用StartService。如果没有打开的绑定,您的服务将停止。

您需要创建一个ServiceConnection才能访问该服务。例如,这里有一个嵌套在MyService中的类:

class MyService {
    public static class MyServiceConnection implements ServiceConnection {
        private MyService mMyService = null;

        public MyService getMyService() {
            return mMyService;
        }
        public void onServiceConnected(ComponentName className, IBinder binder) {
            mMyService = ((MyServiceBinder)binder).getMyService();
        }
        public void onServiceDisconnected(ComponentName className) {
            mMyService = null;
        }
    }

    // Helper class to bridge the Service and the ServiceConnection.
    private class MyServiceBinder extends Binder {
        MyService getMyService() {
            return MyService.this;
        }
    }

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

    @Override
    public boolean onUnbind(Intent intent) {
        return false;  // do full binding to reconnect, not Rebind
    }

    // Normal MyService code goes here.
}

可以使用此帮助程序类通过以下方式访问服务:

MyServiceConnection mMSC = new MyService.MyServiceConnection();

// Inside onResume:
bindService(new Intent(this, MyService.class), mMSC, Context.BIND_AUTO_CREATE);

// Inside onPause:
unbindService(mMSC);

// To get access to the service:
MyService myService = mMSC.getMyService();

答案 1 :(得分:1)

您可以执行Darrell建议的操作,但将该代码放在扩展Activity的新类中,然后将其扩展到所有正常活动上。

我不知道任何其他更优雅的方式来实现你的目标。