系统尝试将我的IntentService转换为Activity

时间:2016-12-08 22:26:44

标签: android android-intent android-activity android-service

我最近做了一些更改,虽然经过大量测试后我无法在我的任何设备上重现此崩溃,但用户之间却经常发生这种情况。它是不同的制造商,通常是Android 6.0.1,但我看过一个6.0.0和4.4.4。我不知道它正在发生什么背景。

Fatal Exception: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.xxx.xxxxx/com.xxx.xxxxx.importfile.HardPathService}: java.lang.ClassCastException: com.xxx.xxxxx.importfile.HardPathService cannot be cast to android.app.Activity
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3132)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
       at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5472)
       at android.app.ActivityThread.access$1200(ActivityThread.java:229)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1827)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:7325)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by java.lang.ClassCastException: com.xxx.xxxxx.importfile.HardPathService cannot be cast to android.app.Activity
       at android.app.Instrumentation.newActivity(Instrumentation.java:1096)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3122)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
       at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5472)
       at android.app.ActivityThread.access$1200(ActivityThread.java:229)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1827)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:7325)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

服务声明如下:

 <service
            android:name=".importfile.HardPathService"
            android:exported="true"
            android:process=":pathservice"/>

我现在意识到它不需要导出(它需要是一个单独的进程),但这是崩溃时声明它的方式。

我开始崩溃时所做的更改:

  1. 更改目标并将版本SDK编译为23到25。
  2. 现在,服务从onActivityResult返回的重新调整的意图启动,该意图方便地设置了数据和剪辑数据。过去常常以新的意图开始。它看起来像这样:

    requestedIntent.setClass(getActivity(),HardPathService.class); 。getActivity()startService(requestedIntent);

  3. 我认为这是再次使用意图的某种方式,但我不知道为什么它有时会失败,所以在更改它之前我宁愿做出解释。

1 个答案:

答案 0 :(得分:0)

只需将数据和clipData复制到新意图,即可完全消失崩溃。所以,不要重复使用你的意图。

Intent startIntent = new Intent(getActivity(), HardPathService.class);
startIntent.setData(requestedIntent.getData());
startIntent.setClipData(requestedIntent.getClipData());
getActivity().startService(startIntent);