戻るボタンを押すと、アプリケーションは破棄状態ではなく停止状態になります。
Android のドキュメント では次のように述べています。
... BACKが押されたときにすべてのアクティビティが破壊されるという動作をするわけではありません。ユーザーがMusicアプリケーションで音楽の再生を開始してからBACKを押すと、アプリケーションは通常の戻る動作を無効にして、プレーヤーのアクティビティが破壊されるのを防ぎ、アクティビティが表示されなくなっても音楽の再生を続けます。
この機能を自分のアプリケーションに複製するにはどうすればよいですか?
私は3つの可能性があるに違いないと思います...
(以下のように)戻るボタンを押してから、ホームボタンが呼び出すメソッドを呼び出します。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
Log.d(this.getClass().getName(), "back button pressed");
}
return super.onKeyDown(keyCode, event);
}
戻るボタンを押してから、ホームボタンを偽装します。
戻るボタンを押してからホーム画面のアクティビティを開始し、アプリケーションのアクティビティを事実上停止状態にします。
編集:私はサービスについて知っていて、この問題が関連しているアプリケーションでそれを使用しています。この問題は、戻るボタンを押したときに、アクティビティを破棄状態ではなく停止状態にすることに関するものです。
ほとんどの場合、バックグラウンドで何かを実行するために サービス を作成する必要があります。目に見えるActivity
は単にこのService
を制御します。そうであれば、あなたのActivity
はいつものようにfinish
を実行することができ、Service
は引き続き実行されます。
より簡単な方法は、Back
ボタンを押して、次のように moveTaskToBack(true) を呼び出すことです。
// 2.0 and above
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
return true;
}
return super.onKeyDown(keyCode, event);
}
私は、アクティビティが正常に終了して自分自身を再現できるようにすることをお勧めします。必要に応じてサービスから現在の状態を読み取る。しかしmoveTaskToBack
は時々手っ取り早い方法として使うことができます。
NOTE:Android 2.0以下のDaveが指摘したように、新しいonBackPressed
メソッドが導入され、 これらの推奨事項 戻るボタンの取り扱い方法について.
次のコードを使用してください。
public void onBackPressed() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
}
戻るボタンをキャッチしたい場合は、Android Developer Blogの この記事を見てください 。これは、Android 2.0でこれを行うためのより簡単な方法と、1.xと2.0上で動作するアプリケーションのためにこれを行うための最良の方法をカバーしています。
ただし、アクティビティが停止した場合でも、デバイスのメモリの空き容量によっては、それでも強制終了される可能性があります。プロセスをUIなしで実行したい場合は、Service
を作成する必要があります。 ドキュメントにはサービスについて次のように書かれています:
サービスには視覚的なユーザインタフェースはありませんが、無期限にバックグラウンドで実行されます。たとえば、サービスがユーザーが他の事項に注意を向けてBGMを再生したり、ネットワークを介してデータを取得したり、何かを計算して結果をそれを必要とするアクティビティに提供したりします。
これらはあなたの要求に適しているようです。
android.app.Activityクラスで定義されているvoid onBackPressed()
をオーバーライドしてみてください。
それが他の誰かを助けるなら、私は私が見やすさのためにオンとオフを切り替えた2種類のレイアウトで活動をしていて、一種のpage1> page2構造をエミュレートしようとしました。彼らが2ページにいて、戻るボタンを押したなら、私は彼らが1ページに戻るようにしたかった、彼らが1ページで戻るボタンを押したなら、それはまだ普通に機能するはずです。それはかなり基本的ですが、うまくいきます
@Override
public void onBackPressed() {
// check if page 2 is open
RelativeLayout page2layout = (RelativeLayout)findViewById(R.id.page2layout);
if(page2layout.getVisibility() == View.VISIBLE){
togglePageLayout(); // my method to toggle the views
return;
}else{
super.onBackPressed(); // allows standard use of backbutton for page 1
}
}
それが誰かに役立つことを願って、応援
実施例.
Super.onBackPressed()を呼び出さないでください。
@Override
public void onBackPressed() {
Log.d("CDA", "onBackPressed Called");
Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);
}
このように、あなたの戻るボタンはホームボタンのように振る舞います。それはあなたの活動を終了させませんが、背景にそれを取ります
2番目の方法は、onBackPressed
内でmoveTaskToBack(true);
を呼び出し、super.onBackPressed
を必ず削除することです。
Android 2.0以降はonBackPressed()をオーバーライドしてください。といった
@Override
public void onBackPressed() {
moveTaskToBack(true);
}