私は以下を使用して新しい活動を開始しています:
Intent intent = new Intent(this, MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
overridePendingTransition(0, 0);
MyNewActivity
の起動中は、黒い画面が表示されます。
Intent.FLAG_ACTIVITY_CLEAR_TASK
を削除すると、アクティビティは黒い画面を表示せずに起動されます(代わりに、新しいアクティビティが読み込まれている間、前のアクティビティが表示されます)。
この黒い画面を回避する方法はありますか?フラグを削除することはオプションではないようです(現在のタスクのスタックをすべてクリアし、ルートとして新しいアクティビティを起動する必要があります)。
EDIT:問題を再現する非常に単純なコードを添付します(アプリにTheme.AppCompat
などのダークテーマを設定します)。黒い画面が表示される時間はごくわずかですが(起動時に受信アクティビティが実行する作業の数によって異なります)、表示されます。 FLAG_ACTIVITY_CLEAR_TASK
を使用しない場合、黒い画面は表示されず、移行はスムーズです。
MainActivity
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
overridePendingTransition(0,0);
}
});
}
}
MyNewActivity
public class MyNewActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
}
}
activity_main.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/holo_blue_bright">
<Button
Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="CLICK ME!" />
</RelativeLayout>
activity_new.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@Android:color/holo_green_light">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="I am the new activity!" />
</RelativeLayout>
ありがとう!
「黒い画面」(別名「プレビュー」)を完全に回避するには、AppTheme
に次を追加します。
<style name="AppTheme" parent="Theme.AppCompat">
<item name="Android:windowDisablePreview">true</item>
...
</style>
ただし、より良いアプローチは、Activity.onCreate
中にメインスレッドで行うことを減らし、ユーザーが待機している間にプレビュー画面を表示することです。スムーズに移行するために、ウィンドウにカスタムの背景を設定して、これをテーマに追加できます。
<style name="AppTheme" parent="Theme.AppCompat">
<item name="Android:windowBackground">@drawable/slash_screen</item>
...
</style>