当前位置: 首页 > 知识库问答 >
问题:

onStart()调用startService()有时会在Android O中导致异常

钮出野
2023-03-14

在阅读了后台服务限制之后,我注意到前台应用程序启动服务是安全的。因此,在我们的应用程序中,我们在片段的onstart()方法中调用了startservice()。我们认为这是可以的,因为在这个文档中,它说,当调用onStart时,片段对用户是可见的,当它是可见的,这意味着这个应用程序是一个前台应用程序。

但有时,我必须承认这种情况很少发生,我们仍然会收到以下例外情况

java.lang.IllegalStateException:不允许启动服务意图{act=action_deactivate cmp=com.adyxe.sync/.clientservice}:应用程序在后台uid UidRecord{db2a697 u0a19 LAST BG:+7m30s540ms空闲更改:缓存的进程:1 seq(0,0,0)}

共有1个答案

秦城
2023-03-14

首先,您可能已经在Android中发现了一个bug:)

无论如何,您应该使用jobintentservice并对其进行排队。

这样,系统将运行您的服务,当应用程序被考虑在前台,您将不会看到错误。在奥利奥之前的版本中,无论应用程序的前景状态如何,该服务都应该立即运行。

public class ExampleJobIntentService extends JobIntentService {
  static final int JOB_ID = 1000;

  static void enqueueWork(Context context, Intent work) {
    enqueueWork(context, ExampleJobIntentService.class, JOB_ID, work);
  }

  @Override
  public void onCreate() {
    super.onCreate();
    // Some initializations...
  }

  @Override
  protected void onHandleWork(Intent work) {
    // Do your stuff...
  }

  @Override
  public boolean onStopCurrentWork() {
    // return true to reschedule this service if your work failed.
    return false;
  }
}
// The intent is the one that will be received here: onHandleWork(Intent work)
ExampleJobIntentService.enqueueWork(context, intent); 
<service
     android:name=".ExampleJobIntentService"
     android:permission="android.permission.BIND_JOB_SERVICE" />
<uses-permission android:name=”android.permission.WAKE_LOCK” />
 类似资料:
  • 以下操作会在运行时导致异常: java.lang.VerifyError:操作数堆栈上的类型错误异常详细信息:location:com/sun/net/httpserver/spi/httpserverprovider$1.run()ljava/lang/object;@27:invokestatic原因:类型“sun/net/httpserver/defaulthttpserverprovide

  • 问题内容: 我有一个带有可观察列表的ComboBox,该列表随用户键入字符或进行选择而更新。当我从ComboBox中选择一个项目并调用我的侦听器事件,然后从ComboBox的ObservableList中调用clear()方法时,引起了我遇到的问题。 完整代码 现在,当我收到错误消息时,ObservableList会按原样出现,但我仍然收到此异常。尝试调试此错误导致我的IDE在调用setAll(运

  • 我正在尝试使用spring Boot运行一个web应用程序。 将密码映射为硬编码值。 我的问题是:当应用程序运行并且在主类上使用注释时,只要它命中URL就会发生以下异常: javax.servlet.ServletException:在org.springframework.web.servlet.dispatcherservlet.render(dispatcherservlet.java:13

  • 问题内容: 我想我发现了一个错误。也许不是,但是Super CSV不能很好地处理。 我正在使用MapReader解析具有41列的CSV文件。但是,我得到的是CSV- 而使我获得CSV的Web服务错了一行。“标题”行是制表符分隔的行,具有41个单元格。 而且“错误的行”是一个由制表符分隔的行,其中包含36个单元格,其内容没有任何意义。 这是我正在使用的代码: 我在上面提到的行中执行mapReader

  • 问题内容: 我对Java线程技术比较陌生,并且我注意到,每次使用Thread.sleep()时,我都必须捕获InterrupetdException。 哪种行为会导致这种情况,并且在具有监视器线程的简单应用程序中,我可以忽略该异常吗? 问题答案: 好吧,如果其他一些线程调用thread.interupt(),则在该线程处于休眠状态时,您将获得Exception。是的,您可能只需将try..catc

  • 我在所有项目(平台共享)中将我的Xamarin. form包更新到最新(2.3.4.224),现在我似乎不应该再使用或枚举,因为它们已被弃用。 编译器因为这些行而抱怨: 上面写着: "Device.OS已过时。请改用Runtime平台" 到目前为止一切都很好,现在我想解决这个问题,我一直在尝试使用: 但它抛出了一个运行时异常。这是堆栈跟踪 04-08 14:57:34.812 I/MonoDroi