Android 6.0 から onCreate() で finish() していない Activity に Theme.NoDisplay をセットすると startActivity() したときにクラッシュします。 Theme.Translucent や Theme.Translucent.NoTitleBar はクラッシュしません。クラッシュ時の Exception は IllegalStateException で、メッセージは did not call finish() prior to onResume() completing です。
この原因となるテーマ属性は windowNoDisplay です。デフォルトは false ですが、Theme.NoDisplay では true がセットされています。つまり
onCreate() で finish() していない Activity のテーマで windowNoDisplay が true だとクラッシュします。
次のように onCreate() で finish() していればクラッシュしません。
public class NoDisplayActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
finish();
}
}
<activity android:name=".NoDisplayActivity"
android:theme="@android:style/Theme.NoDisplay" />
windowNoDisplay のドキュメントには
if set to true, and this window is the main window of an Activity, then it will never actually be added to the window manager. This means that your activity must immediately quit without waiting for user interaction, because there will be no such interaction coming.
とあるので、正しい挙動になったと言えるのでしょう。
- 関連
- FacebookActivity did not call finish() on Api 23+ : stack over flow
- Activity did not call finish? (API 23) : stack over flow
- https://commonsware.com/blog/2015/11/02/psa-android-6p0-theme.nodisplay-regression.html
0 件のコメント:
コメントを投稿