0

以下を使用して、MainActivityというアクティビティからActivity1というアクティビティを呼び出します。

Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);

したがって、コントロールがActivity1になると。通常のアクティビティライフサイクルが開始されます。つまり、onCreate()が呼び出されます。

コントロールがActivity1にあるときに戻るボタンをクリックしたとき。finishメソッドが呼び出され、次にonDestroy()が呼び出され、コントロールがMainActivity画面に戻ります。

@Override
public void onBackPressed() {
        Log.d(TAG, "onBackPressed()");
        finish();
    }

次回Activity1を呼び出すとき。前の呼び出しからonDestroy(戻るボタンを押したとき)を呼び出したときに、onCreateが再度呼び出されます。

質問:1。「finish()」メソッドを呼び出さなくても、戻るボタンが押されたときに制御をMainActivityに戻す方法はありますか?2.終了の呼び出しに関する問題。MainActivityからActivity1を呼び出すたびに、Activity1の新しいインスタンスが作成されます。つまり、ライフサイクルは再びonCreate()から始まります。これはパフォーマンスの大きな問題になっているため、これが発生することは望ましくありません。

私が探している主なポイントは、最初に呼び出したときに、oncreateではなくresume状態からactivity1を開始できるかどうかです。

4

2 に答える 2

1

onBackPressed で「finish()」メソッドを呼び出す必要はないと思います。戻るボタンを押すと、Android がそれを行います。onBackPressed は、最後のメヌエットを整理するために使用されます (sharepreferences への保存など)。

Android のデフォルトの動作では、新しいアクティビティが画面に配置されるたびに onCreate が呼び出されます。これが起こらなければ、新しいインテントを呼び出すことはできません。

これがパフォーマンスの問題である理由がわかりません。activity1 が何をしているのか、もう少し詳しく説明していただけますか? 負荷の高いネットワーク通信を行っていませんか? ストアの結果をキャッシュすることはできますか?

于 2012-10-09T00:23:08.957 に答える
0

Actity1 では、WebView を次のように定義します。

private static WebView webView = null;

nullのonCreate()場合にのみ作成します。

if(webView == null){
  //create webview and load from network
}

他のアクティビティ内のオブジェクト、または存続する可能性のあるオブジェクト (ランナブル、メッセージなど) をポイントすると、メモリ リークが発生しやすくなるため、このアプローチは慎重に使用してください。

于 2012-10-09T00:53:50.227 に答える