我收到以下错误,我不知道为什么会发生这种情况。
错误:
08-23 17:07:46.533 22454-22454/com.a.b.c E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.a.b.c, PID: 22454
java.lang.RuntimeException: Unable to resume activity {com.a.b.c/com.a.b.c.MainActivity}: java.lang.IllegalStateException: Activity {com.a.b.c/com.a.b.c.MainActivity} did not call finish() prior to onResume() completing
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3103)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalStateException: Activity {com.a.b.c/com.a.b.c.MainActivity} did not call finish() prior to onResume() completing
at android.app.Activity.performResume(Activity.java:6324)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3092)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("Started");
}
我正在尝试在运行Android 6.0(API 23)的AVD上运行代码,适用于API 22.
答案 0 :(得分:19)
我遇到了同样的问题,与
相同的崩溃did not call finish() prior to onResume() completing
错误消息。所以我创建了v23 \ styles.xml
<style name="AppTheme" parent="android:Theme.Translucent">
...
</style>
而普通的styles.xml有
<style name="AppTheme" parent="android:Theme.NoDisplay">
...
</style>
工作正常,不再崩溃。但是,我不知道这个解决方案有多好,在API 23中使用Theme.Translucent,特别是因为它是defined
半透明活动主题(API级别10及更低级别)。
我真的希望他们能解决这个问题。
答案 1 :(得分:17)
我找到了解决方法。在setVisible(true)
中致电onStart()
:
@Override
protected void onStart() {
super.onStart();
setVisible(true);
}
答案 2 :(得分:15)
这是Android M开发者预览中的错误。 More details
答案 3 :(得分:4)
我的隐形活动显示确认对话框。当我使用android:Theme.Translucent.NoTitleBar
时,这确实失去了材料设计外观。
因此,根据上述答案和CommonWare的博客以及Android主题定义,我使用这种风格,扩展了普通的AppCompat.Light主题:
<style name="AppTheme.NoDisplay" parent="Theme.AppCompat.Light">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation</item>
<item name="android:windowDisablePreview">true</item>
<item name="android:windowNoTitle">true</item>
</style>
答案 4 :(得分:4)
我已经找到了实际的解决方案。 Theme.NoDisplay
仅用于
实际上不显示UI的活动;也就是说,他们在恢复之前先完成自己的工作。
来源:Android Dev
因此,如果您将此主题分配给活动,则必须 在退出finish()
之前(即在系统调用onCreate()
之前,调用onResume
)错误显示为“没有在onResume()之前调用finish()”。
因此,此主题的实际用例是引导活动等,例如,当您必须根据用户是否已通过身份验证确定是显示登录视图还是主视图时,例如此类:
public class BootstrapActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!userLoggedIn) {
startActivity(new Intent(this, LoginActivity.class));
} else {
startActivity(new Intent(this, MainActivity.class));
}
finish();
}
}
答案 5 :(得分:0)
其中android 23&gt; https://www.youtube.com/watch?v=NAcUGwCkrcs
清单:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
Activity extends from Activity. Not AppCompatActivity.
,版本&gt; = 23
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
getWindow().setStatusBarColor(getResources().getColor(android.R.color.transparent))}
答案 6 :(得分:0)
这是由于在用户无法看到的Activity
上设置了主题。我猜想Android之所以这样做,是因为您不能无限期地运行不可见的Activity
。
在活动finish()
被调用之前调用onResume()
(如错误消息所述)将阻止这种情况的发生。
我的用例是启动一个不可见的Activity
来处理深层链接并将其定向到我的应用程序的正确部分。
答案 7 :(得分:-2)
尝试在build.gradle中将targetSdkVersion
更改为22。 Theme.NoDisplay
在api级别23中显示错误。