2010-11-25 30 views
1

我有一个Android服务,使用StartService()在应用程序的第一个Activity的OnCreate中创建。我需要此服务在应用程序的整个生命周期内运行,即应用程序中的所有活动。但是用户按下Home键或Back键后,该服务不应该消耗资源。除了在所有活动的onPause()方法中停止服务之外,是否有任何优雅的方法来执行此操作?按下主页键后运行的Android服务

+0

'不应该消耗资源'是什么意思?你的意思是什么资源? – xandy 2010-11-25 03:48:30

+0

我不希望服务在后台运行 – Ananth 2010-11-25 03:52:14

回答

1

你可以做什么达雷尔建议,但把这些代码在一个新类扩展了Activity,然后将其扩展到所有常规活动中。

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

2

除了使用StartService之外,您可以在onResume中调用bindService,并在onPause中调用unbindService。没有打开的绑定时,您的服务将停止。

您需要创建一个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(); 
+0

感谢您的回复。即使在这种情况下,我需要处理所有活动中的OnPause事件 – Ananth 2010-11-25 05:06:09