1

私はアンドロイドの初心者で、それについて質問があります。

Androidで単一のアプリケーションを作成するにはどうすればよいですか? 私はそれをグーグルで検索し、launchModeをsingleTaskまたはsingleInstanceに設定することを解決する方法を得ました。もちろん試しましたが、期待される解決策が得られませんでした。

実際、私はMP3プレーヤーアプリを持っていました.それを実行すると:

ホームボタンを押す→ホームボタンを長押し→マイアプリを選択→再開OK。

しかし、それが起動されると:

戻るボタンを押す->ホームボタンを長押しする->アプリを選択する->再開してもOKではありません。Android が私のアプリの新しいインスタンスを作成したことを意味します。ご存知のように、2 つのアプリが一緒に実行されますが、それは望ましくありません。

起動モードをsingleTaskに設定してみました。最初のアクティビティ (singleTask に設定) では正常に動作しますが、画面のボタンを押して新しいアクティビティ (sigleTask に設定していない) を参照すると、正常に動作しませんでした。

私のアプリには多くのアクティビティがあるため、起動モードをsingleTaskまたはsingleInstaneに設定することは完全に良くないと思います。

回答をお待ちしております。

ありがとうございました。@@: 英語の文法に誤りがありましたら申し訳ありません (私は英語が苦手です)。

アップデート:

私はその問題を修正しましたが、今はエミュレーターについて疑問を抱いています。前に述べたように、戻るボタンを押すとアプリが破棄されるため (finish() メソッドを呼び出す)、アプリが保持するすべての環境が解放されます。しかし、戻るボタンを押しても、まだ曲が再生されているので、アプリがまだ実行されている可能性があります。

私のコード:

public class MainActivity extends Activity {

MediaPlayer mp;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mp = new MediaPlayer();
    playSong("sdcard/Music/lung ta lung tung.MP3");
}


public void playSong(String str)
{
    try {
        mp.setDataSource(str);
        mp.prepareAsync();
        mp.setOnPreparedListener(new OnPreparedListener() {

            public void onPrepared(MediaPlayer arg0) {

                mp.start();
            }
        });
    } catch (IllegalArgumentException e) {

        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
4

2 に答える 2

2

タスクをバックグラウンドに移動することで、戻るボタンをホームにすることができます

@Override
public void onBackPressed() {

    moveTaskToBack(true);

}
于 2012-10-15T14:28:56.803 に答える
0

一般に、Android のアプローチは、OS がアプリケーションを処理するというものです。

Android アプリケーションで [戻る] ボタンを押すと、コードはそのボタンを処理する場合と処理しない場合があります。

あなたが説明したシナリオでは、戻るボタンはおそらくコードで処理され、それを押すとアプリは「finish();」を呼び出します。活動について。例えば:

@Override
 public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
       //this will finish the activity
       finish(); 
       //this will act as the home button (Use only one of them)
       //moveTaskToBack(true); 
       return true;
    }
 }

ホームボタンを押すと、コードが処理する可能性のあるイベント (onPause) があります。誰かがホーム ボタンを押したときにアプリを終了したいシナリオと、何か他のことをしたいシナリオ (たとえば、アクティビティをバックグラウンドに移動するだけ) があります。

コメントで述べたように、アプリケーションのライフサイクルについて読む必要があります アクティビティのライフサイクルの管理

于 2012-10-15T14:25:46.773 に答える