首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓服务START_STICKY START_NOT_STICKY

安卓服务START_STICKY START_NOT_STICKY
EN

Stack Overflow用户
提问于 2013-08-22 17:44:42
回答 1查看 2.6K关注 0票数 3

我需要保持我的服务总是在后台运行。并使用"startService()“函数启动服务。无论应用程序的状态如何,我都不想重新启动服务。

这是我的观察结果。

START_STICKY >如果应用程序启动,服务将重新启动。当应用程序关闭时,服务也会重新启动。

START_NOT_STICK >服务在应用程序关闭后无法工作。

我需要一个总是在运行的服务,它将在应用程序启动时接收广播。服务状态不取决于应用程序是否正在运行。

你能帮我吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-22 17:47:36

您将希望设置一个引导接收器,它在设备启动时启动您的服务警报(它将间歇性地唤醒并确保您的服务正在运行)。警报接收器应该每分钟(大约)唤醒一次,以确保您的服务没有被Android清理(这将不时发生)。

编辑

您需要一个BootReceiver来启动如下所示的警报:

代码语言:javascript
复制
public class BootReceiver extends BroadcastReceiver {
    @Override
       public void onReceive(Context context, Intent intent) {

          AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
          PendingIntent pendingIntent =
                   PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReceiver.class), 0);

          alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 2000,  60000, pendingIntent);
       }
    }

一个alarmReceiver应该是这样的:

代码语言:javascript
复制
public class AlarmReceiver extends BroadcastReceiver {
    private String TAG = "AlarmReceiver";
   // onReceive must be very quick and not block, so it just fires up a Service
   @Override
   public void onReceive(Context context, Intent intent) {     
      Intent i = new Intent(context, MyLovelyService.class);      
      PendingIntent.getService(context, 0,i, 0).send();    
   }
}

最后,这需要进入你的清单:

代码语言:javascript
复制
<receiver android:name=".BootReceiver">
  <intent-filter>
     <action android:name="android.intent.action.BOOT_COMPLETED" />
  </intent-filter>
 </receiver>

 <receiver android:name=".AlarmReceiver" />
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18387346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档