【问题标题】:Worker thread in START_NOT_STICKY serviceSTART_NOT_STICKY 服务中的工作线程
【发布时间】:2013-02-28 02:59:39
【问题描述】:

我对 android 中的 START_NOT_STICKY 感到困惑。这里有两个问题:

  1. 我不需要为START_NOT_STICKY 服务显式调用stopself,因为它会在onStartCommand 之后自行停止,对吧?

  2. 如果在服务中启动一个 workerThread,它会在我返回 START_NOT_STICKY 后继续运行吗?为什么我想知道服务应该在返回 START_NOT_STICKY 后自行停止

  3. 如果我的服务同时实现 onStartCommand 和 onBound,我应该在哪里调用 stopSelf?

编辑(来自安卓文档)

对于已启动的服务,它们可以决定运行另外两种主要的操作模式,具体取决于它们从 onStartCommand() 返回的值:START_STICKY 用于根据需要显式启动和停止的服务,而 @987654324 @

【问题讨论】:

    标签: android service


    【解决方案1】:

    不,服务在从onStartCommand() 返回后不会自行停止。请参阅this

    START_* 值仅向系统指示如果由于某种原因系统决定终止服务时应该做什么。 您仍然应该调用stopSelf()stopService() 来停止正在运行的服务,否则服务将无限期地运行或直到系统决定终止其进程。

    当 android 系统杀死正在运行 Service 的进程时,它会根据 onStartCommand() 返回的值尝试在可能的情况下重新创建它。

    • 如果返回的值为START_STICKY,它将重新创建服务进程,并使用任何待处理的 Intent 或 null(如果没有待处理的 Intent)调用 onStartCommand()。
    • 如果返回START_NOT_STICKY,系统会重新创建Service进程,只有在有待处理的Intent时才会调用onStartCommand()。

    因此,START_NOT_STICKY 将保证只有在系统决定终止您的服务并且没有待处理的意图时,您的服务才会启动。 请看this了解START_NOT_STICKY

    【讨论】:

    • 来自this 链接-In cases like this, stopService() or stopSelf() does not actually stop the service until all clients unbind.。因此,一旦所有组件都与服务解除绑定,您应该调用 stopSelf
    【解决方案2】:

    维杰, 您应该在单独的线程中提出您的问题,但这里是解决方案

    您可以通过实现一个广播接收器来实现这一点。 在你的 AndroidManifest.xml 中创建一个接收器:-

    <receiver android:name="com.demo.bootup.BootupBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>
    

    确保您设置了适当的权限

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    现在您可以在 onReceive() 方法中启动您的服务。

    @Override
    public void onReceive(Context context, Intent intent) {
       Intent bootupIntent = new Intent(context, BootupService.class);
       context.startService(bootupIntent);
    }
    

    确保调用 Service 类而不是 BootupService.class

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多