2011-01-24 14 views
29

私は、起動時にインターネットから画像を読み込むアクティビティを取得しました。メモリを節約するために、「戻る」ボタンが押された状態でアクティビティが残っていると、アクティビティですべてのデータをダンプする必要があります。つまり、その中にあるすべての文字列とイメージを取り除きます。私はこれを行う最善の方法は、単に活動を殺すことだと考えました。戻るボタンを押したときにアクティビティを削除するにはどうすればよいですか?

バックボタンを押したときのコールバックを把握できないようです。だから、私はonPause()onStop()コールバックを使用しようとしていますが、両方の方法で強制的に私のアプリケーションを閉じます。コードは次のとおりです。

public void onPause() { 
    this.finish(); 
} 
public void onStop() { 
    finish(); 
} 

私はこれを複数試してみましたが、どれも動作していないようです。何か案は?

+0

あなたは正確に何を探していますか?バックで現在の活動を終了するには –

答えて

36

アプリケーション・ライフサイクルがどのように動作するかの構造、hereを勉強している場合、その後、あなたはonPause()をするとき、他の活動の向上が焦点と呼ばれていることを知って来る、まあ、あなたの活動に

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    { 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+1

何がポイントですか?戻るボタンを押すと、アクティビティスタックが自動的に下に移動します。 'finish()'はあなたが戻ってこないことを確かめます。 (つまり、疑問は間違いなく曖昧です。) – EboMike

+2

もちろん、活動が殺されているのは、バックボタンを押すと確かではないので、仕上げを殺すことが重要で、何が質問されたのでしょうか?しかし、メモリを解放することは自動的にOSによって行われます。 – ingsaurabh

+2

絶対にありません。アクティビティが前面にない場合は、OSによって再利用できます。完了したかどうか。 – EboMike

4

これを追加アクティビティが表示されなくなったときにonStop()が呼び出されます。

私がまだ学んだことから、finish()はアクティブであり、かつ/または焦点があるアクティビティからのみ呼び出すことができます。 onPause()メソッドからfinish()を呼び出す場合は、アクティビティがアクティブでなくなったときに呼び出すことを意味します。したがって、例外がスローされます。

finish()onStop()に電話すると、そのアクティビティがバックグラウンドに送信されているため、この例外は表示されなくなります。

backボタンを押すと、onStop()が呼び出されます。

ほとんどの場合、Androidは自動的にあなたが現在実行したいことを自動的に行います。

6

まず、finish()は、プロセスを破壊してメモリを解放しません。アクティビティスタックからアクティビティを削除するだけです。プロセスを終了する必要があります。これは一連の質問で回答されます(これは何度か尋ねられているため)。

しかし、適切な答えは - です。 Android OSはメモリが必要なときにメモリを自動的に解放します。メモリを解放しないと、ユーザーが戻ってくると、アプリはより早く起動します。

see hereにお書きください。メソッドonBackPressed

+7

アクティビティが多くのリソースを使用している場合は、GCを待つのではなく、アプリケーションの内部からリソースを削除してみましょう。それは通って実行する必要がありますので、電話の速度を遅くする必要があります。良いメモリ管理は、プログラム自体の中でそれを管理しようとするすべての試みをしています。ほとんどのマネージドプログラミング言語とIDEが自動的にプログラムに自己クリーンアップコードを入れ、そのライフサイクルを与える理由もありますので、アプリケーション内で最高のメモリを管理できます。 – Shaun

+1

Shaunは正しいです、良いメモリ管理はプログラム自体の中でそれを管理するためにあらゆる試みをしています。 – dns

61

シンプル上書き:

@Override 
    public void onBackPressed() { 
      super.onBackPressed(); 
      this.finish(); 
    } 
13
public boolean onKeyDown(int keycode, KeyEvent event) { 
    if (keycode == KeyEvent.KEYCODE_BACK) { 
     moveTaskToBack(true); 
    } 
    return super.onKeyDown(keycode, event); 
} 

私のアプリは上記のコードで閉じ。

+0

それは働いています、ありがとう – Mohsen

+0

それは働いていますが、アプリはいつでも同じページを開いています –

+0

しかし、ランチャーの活動でアプリを起動したい –

関連する問題