web-dev-qa-db-ja.com

アクティビティは終了を呼び出しませんでしたか? (API 23)

私は次のエラーを受け取っていますが、なぜそれが起こっているのか分かりません。

エラー:

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)、API 22で動作するAVDでコードを実行しようとしています。

31
daka

これはAndroid M開発者プレビューのバグです。 詳細

15
Malwinder Singh

私は同じ問題、同じクラッシュを抱えています

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 as

半透明のアクティビティのテーマ(APIレベル10以下)。

彼らがこのバグを修正することを本当に願っています。

20
Alex Vang

非表示のアクティビティに確認ダイアログが表示されます。これは材料設計の外観を失うを使用したとき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
Ridcully

ここでAndroid 23> https://www.youtube.com/watch?v=NAcUGwCkrcs

マニフェスト:

Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
Activity extends from Activity. Not AppCompatActivity.

およびバージョン> = 23の場合

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop){     
    getWindow().setStatusBarColor(getResources().getColor(Android.R.color.transparent))}
0
Miguel Gama

これは、ユーザーが表示できないActivityにテーマを設定しているためです。理由は、Androidがこれを行うため、不可視のActivityを無期限に実行できないためです。

finish()が呼び出される前にアクティビティでonResume()を呼び出すと(エラーメッセージに示されているように)、これが発生しなくなります。

ユースケースでは、非表示のActivityを起動して、ディープリンクを処理し、アプリの正しい部分にリダイレクトしました。

0
StuStirling