Android 只有在屏幕旋转时,应用程序才会崩溃;从另一个应用程序的意图开始

Android 只有在屏幕旋转时,应用程序才会崩溃;从另一个应用程序的意图开始,android,Android,好的,我一直在搜索,但我找不到任何与我的应用程序类似的东西。我有一个应用程序,它使用IntentService导入和导出文件,看起来一切都正常,但当我在通过intent从其他应用程序中选择兼容文件启动应用程序后旋转屏幕时,我的应用程序崩溃了。如果它在选择文件之前已经运行,它不会崩溃,我完全不知道会发生什么以及如何解决它。 由于该错误非常奇怪,我不知道哪些信息与此相关,但以下是错误: java.lang.RuntimeException: Unable to instantiate activi

好的,我一直在搜索,但我找不到任何与我的应用程序类似的东西。我有一个应用程序,它使用IntentService导入和导出文件,看起来一切都正常,但当我在通过intent从其他应用程序中选择兼容文件启动应用程序后旋转屏幕时,我的应用程序崩溃了。如果它在选择文件之前已经运行,它不会崩溃,我完全不知道会发生什么以及如何解决它。 由于该错误非常奇怪,我不知道哪些信息与此相关,但以下是错误:

java.lang.RuntimeException: 
Unable to instantiate activity ComponentInfo{com.txintxe.dev.xxx/com.txintxe.dev.xxx.services.ExportImportService}: java.lang.ClassCastException: com.txintxe.dev.xxx.services.ExportImportService cannot be cast to android.app.Activity
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2586)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751)
                                                                        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4556)
                                                                        at android.app.ActivityThread.-wrap19(ActivityThread.java)
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                        at android.os.Looper.loop(Looper.java:154)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:6186)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
                                                                     Caused by: java.lang.ClassCastException: com.txintxe.dev.saltea.services.ExportImportService cannot be cast to android.app.Activity
                                                                        at android.app.Instrumentation.newActivity(Instrumentation.java:1079)
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2576)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2751) 
                                                                        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4556) 
                                                                        at android.app.ActivityThread.-wrap19(ActivityThread.java) 
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502) 
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                        at android.os.Looper.loop(Looper.java:154) 
                                                                        at android.app.ActivityThread.main(ActivityThread.java:6186) 
                                                                        at java.lang.reflect.Method.invoke(Native Method) 
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 
舱单的(我认为)相关部分:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
        android:name=".ListActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop"
        android:theme="@style/AppTheme.NoActionBar">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>

        <intent-filter>
            <data
                android:scheme="content"
                android:mimeType="*/*"
                android:host="*"
                />
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.EDIT" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

        <intent-filter>
            <data
                android:scheme="file"
                android:mimeType="*/*"
                android:pathPattern=".*\\.xxx"
                android:host="*"/>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.EDIT" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>
最后是在IntentService中处理意图的方法:

private void doImportRecipe() {
    Intent intent = getIntent();
    intent.setAction(ExportImportService.ACTION_IMPORT);
    intent.setClass(getApplicationContext(), ExportImportService.class);
    startService(intent);
}
protected void onHandleIntent(Intent intent) {
    if (intent != null) {
        final String action = intent.getAction();
        final ArrayList<String> xxxKeys = intent.getStringArrayListExtra(EXTRA_XXXKEYS);
        switch(action) {
            case ACTION_IMPORT:
                final Uri xxxPath = intent.getData();
                handleActionImport(xxxPath);
                break;
            case ACTION_EXPORT:
                handleActionExport(xxxKeys);
                break;
            case ACTION_SHARE:
                handleActionShare(xxxKeys);
                break;
        }
    }
}
protectedvoid onHandleIntent(意图){
if(intent!=null){
最后一个字符串action=intent.getAction();
final ArrayList xxxKeys=intent.getStringArrayListExtra(额外的xxxKeys);
开关(动作){
案例行动(进口):
最终Uri xxxPath=intent.getData();
handleActionImport(xxxPath);
打破
案例行动(出口)
手动导出(xxxKeys);
打破
案例行动分享:
handleActionShare(xxxKeys);
打破
}
}
}

如果还有其他需要解决的问题,我可以发布它,但正如我所说的,一切似乎都正常,除非应用程序从导入操作开始,然后旋转。

在清单中定义您的意图服务类

<service
   android:name=".MyIntentService"
   android:exported="false" />

嗯。现在它似乎可以工作了,问题在于重复使用相同的意图,而不是在这里创建新的意图:

   private void doImportRecipe(String data) {
    Intent intent = new Intent();
    intent.setAction(ExportImportService.ACTION_IMPORT);
    intent.setClass(getApplicationContext(), ExportImportService.class);
    intent.setData(Uri.parse(data));
    startService(intent);
}

我将继续测试它,以确保它现在真的能工作,谢谢大家花时间尝试回答:)

您的问题是由以下原因引起的:
:java.lang.ClassCastException:com.txintxe.dev.saltea.services.ExportImportService无法转换到android.app.Activity
。你应该检查一下。并显示更多的代码。@KeLiuyue是的,我知道,但问题是,就我所知,在我的代码中没有任何地方我试图将IntentService转换为活动。当我旋转屏幕时,如果应用程序是从另一个应用程序启动的,如果应用程序在后台,它就会崩溃。我没有在任何地方看到
ExportImportService
。@KeLiuyue方法
onHandleIntent()
是扩展
IntentService
ExportImportService
的一部分,但我需要加载另一个面向横向的xml,所以这是不可能的(而且它并不总是崩溃,只是当它从另一个应用程序单击文件启动时)。ExportImportService.class是一个服务或活动?它是一个IntentService@Aj121
   private void doImportRecipe(String data) {
    Intent intent = new Intent();
    intent.setAction(ExportImportService.ACTION_IMPORT);
    intent.setClass(getApplicationContext(), ExportImportService.class);
    intent.setData(Uri.parse(data));
    startService(intent);
}