6

実際、私は Android のシンプルで基本的な概念について質問していることを知っています。finish()しかし、私はこれらとonDestroy()方法について少し混乱しています。これによりアクティビティが強制終了され、これらのアクティビティに関連付けられたリソースが解放されるかどうか。

アクティビティを 1 つだけ含む単純なアプリケーションを試してみました。アプリケーションが実行されると、アクティビティが開始されるようなコンセプトだと思いました。戻るボタンをクリックすると終了します。そして、メモリ使用量を知るために、各ライフサイクルメソッド内にいくつかのトーストメッセージを表示しました。そして、戻るボタンをクリックすると、、、およびが実行されonPause()ましonStop()onDestroy()。この活動は終わったと思いました。しかし、アプリケーションを再起動すると、前回よりも多くのメモリが必要になりました。これは、Eclipse からアプリを実行するか、ホーム画面からアプリケーションを再起動するたびに発生します。

なぜそれが起こっているのですか?アプリケーション/アクティビティを実際に破棄してメモリを解放するにはどうすればよいですか?


私は自分のコードを含めています。クラス内でトーストメッセージを1つだけ送信します。次に、メモリ使用量も増加しています。

アプリケーションを実行するたびに、割り当てられたサイズが次のように増加しています: 3302744、3442384、3474552

 public class myActivity extends Activity
   {
         @Override
         public void onCreate(Bundle savedInstanceState)
         {
             super.onCreate(savedInstanceState);     
        Toast.makeText(getBaseContext()," allocated size  = " + Debug.getNativeHeapAllocatedSize(), 1).show();      
         }

   }

マニフェスト:

<application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".myActivity "  
                  android:label="@string/app_name"  >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity> 
 </application>

メモリが毎回増加するのはなぜですか?

4

3 に答える 3

20

finish()はアクティビティを強制終了し、メモリを解放します...リークされた参照が保存されていない限り...たとえばonRetainNonConfigurationInstance()などのメソッドで

戻るボタンを押すと、いわゆるfinish()メソッドが、onPause、onStop、onDestroyを呼び出します。

于 2011-05-24T10:14:27.107 に答える
10

デフォルトの動作では、戻るボタンを押すとアクティビティが終了し、破棄されます。ただし、onDestroyまたはonPauseでトーストを表示することはお勧めできません。それはあなたがそれを起こしたくない方法であなたの活動のライフサイクルを変えるでしょう。代わりにロギングを使用すると、実際に何が起こっているかがわかります。ところで、finish()はコードから明示的に呼び出すものであり、onDestroy()は、何らかの方法でアクティビティを終了/破棄した結果として呼び出されるライフサイクルイベント/メソッドです。

于 2011-05-24T10:17:20.273 に答える
3

Finish()は文字通りアクティビティを終了し、参照が存在しない場合、GCはリソースを回復します。onDestory()は、実際には、アクティビティを破棄しているときにシステムが呼び出すメソッドであり、この関数を実装することになっています。あなたはあなたのアプリを破壊することを心配する必要はありません、アンドロイドはあなたのためにそれをします。

于 2011-05-24T10:14:42.160 に答える