java - 为什么不能将 Intent Service 声明为私有(private)包?

标签 java android intentservice android-intentservice

我正在开发一个 android 库,所以除了库用户需要访问的几个类之外,我希望将所有库代码包保密。

在这些类中有一个 IntentService。但是,应用程序崩溃并出现此错误:

java.lang.RuntimeException: Unable to instantiate service com.library.sdk.SaveDataIntentService: java.lang.IllegalAccessException: java.lang.Class<com.library.sdk.SaveDataIntentService> is not accessible from java.lang.Class<android.app.ActivityThread>
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:3304)
    at android.app.ActivityThread.-wrap5(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6349)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)

Caused by: java.lang.IllegalAccessException: java.lang.Class<com.library.sdk.SaveDataIntentService> is not accessible from java.lang.Class<android.app.ActivityThread>
    at java.lang.Class.newInstance(Native Method)
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:3301)
    at android.app.ActivityThread.-wrap5(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6349) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 

甚至 list 也会显示警告,因为 Intent 服务未声明为公共(public)类。

究竟是什么导致了这种情况,为什么需要公开 Intent 服务?

最佳答案

What exactly is causing this

包外的 Java 类需要创建 IntentService 的实例。

why does the intent service need to be public?

因为包外的 Java 类不能创建包私有(private)类的实例,也不能调用包私有(private)构造函数。

关于java - 为什么不能将 Intent Service 声明为私有(private)包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48323633/

相关文章:

IntentService的onHandleIntent方法中的android.os.NetworkOnMainThreadException

java - 媒体播放器的 Intent 过滤器(Youtube 视频播放)

java - 将标记中的数据添加到Firebase

android - 正确使用 fragment

android - mpAndroidChart可以画渐变折线图吗?

android - 意向服务问题

Java值对象比较方法

java - 使用 java 8 进行回调

java - Python 与 Java UTC?

android - Activity 在 Intent 中找不到 Bundle