私が達成したいこと:
MainActivity は再利用する必要があります。つまり、もう一度実行したくはありませんが、同じアクティビティでonCreate()
のみ実行したいのですonResume()
が、奇妙な動作をしています。launchMode
AndroidManifest の が無視されているようです。私が設定したもの ( singleTask
、singleInstance
) は、常にヒープの増加につながる新しいアクティビティを作成します。ホームボタンでアプリを終了して再度起動すると、新しいインスタンスが作成されるたびに。(.hprof リーク レポートで確認)。
これはどのように見えるかです:
<activity
android:name="com.mydomain.myapp.pro.MainActivity"
android:launchMode="singleTask"
android:screenOrientation="nosensor" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
問題を切り分けようとしたところ、ホームを押すとアクティビティが強制終了される (onDestroy()
が実行される) ことがわかりましたが、リーク レポートにはこれが示されています。アプリを起動するたびに、MainActivity インスタンスがどんどん増えていきますが、最後のインスタンスは破棄されると言われています。どうしてonDestroy()
実行されたのでしょうが、アクティビティを開始したのと同じ数のインスタンスがあります (アプリの開始によって直接):
まったく実行されないのも興味深いことonDestroy()
です。なぜなら、私は決して電話finish()
をかけず、まだ多くのリソースを持っているからです。したがって、Android が Activity を kill する必要はありませんが、最初は上の問題の方が重要です。finish()
MainActivity の on ですべてのフラグメントを kill しているからかもしれませんonPause()
。そうしないと、フラグメントが漏れます。そして、おそらくMainActivityであるフラグメントのonDestroy()
呼び出し。super.onDestroy()