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