如何在没有持续通知的情况下保持服务活着

时间:2013-03-19 18:10:35

标签: android service

我知道我可以使用持续通知来保持我的服务活着,但我有一个持有广播接收器的服务。我不想使用通知来简单地握住我的广播接收器。我也知道我可以在应用程序的清单中注册我的接收器,但我希望用户能够控制接收器是否处于活动状态。

以下是不断重启的服务。

public class DockServiceListener extends Service{

IntentFilter filter;
BroadcastReceiver mReceiver;

public void onCreate() {
    super.onCreate();

    Toast.makeText(getApplicationContext(), "Receiver started!", Toast.LENGTH_SHOR

    filter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
    mReceiver = new DockReceiver();

}

public int onStartCommand(Intent intent, int flags, int id) {
    super.onStartCommand(intent, START_STICKY, id);

    registerReceiver(mReceiver, filter);

    return id;
}

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

很简单。我也知道它可能是android清理但是Facebook Messenger和其他服务怎么没有被关闭?除非我不知道它因为它没有吐司的消息?或者有没有办法只运行onCreate一次?

好吧无论如何,谢谢大家的期待!希望有人可以更好地教育我! :)

编辑:新方法想知道这是否正确?

startBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            PackageManager pm = getApplicationContext().getPackageManager();
            ComponentName dockReceiver = new ComponentName(getApplicationContext(), DockReceiver.class);
            pm.setComponentEnabledSetting(dockReceiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
            finish();



        }
    });

    stopBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            PackageManager pm = getApplicationContext().getPackageManager();
            ComponentName dockReceiver = new ComponentName(getApplicationContext(), DockReceiver.class);
            pm.setComponentEnabledSetting(dockReceiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
            finish();

        }
    });

1 个答案:

答案 0 :(得分:1)

  

我知道我也可以在我的应用程序清单中注册我的接收器,但我希望用户能够控制接收器是否处于活动状态。

然后使用PackageManagersetComponentEnabledSetting()启用或停用在清单中注册的BroadcastReceiver。你不需要用服务浪费用户的RAM来控制“接收器是否有效”。