0

一度だけ作成するアクティビティがあります。つまり、onCreate一度だけ呼び出すことができます。再度呼び出された場合は、Activity が何もしないようにします。

次のようにすることをお勧めしますか?

protected void onCreate(Bundle savedInstanceState) {
    this.setTheme(android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
    super.onCreate(savedInstanceState);

    if(onCreateWasCalledAlreadyBoolean) {
        setResult(RESULT_OK);
        finish();
        return;
    }

    //Do other stuff here
}
4

2 に答える 2

1

アクティビティのライフサイクルがどのように機能するかを理解していることを前提としています。つまり、ここに当てはまらないことを避けようとしているわけではありません (単にs などのonCreateときに複数回呼び出される可能性があると考えています)。onRestart

技術的には、まったく問題ありません。

ただし、アクティビティをまったく作成すべきではないのに、アクティビティ (" A ") を再度呼び出す必要がある理由について、もっと心配する必要があります。

アクティビティAが既に "呼び出されている" (?) かどうかを確認している場合、これは、前のアクティビティ (" B ") がアプリのロジック フローに誤りがあり、代わりにBが実際には、そのアクティビティAを開始する必要があります。つまり、アクティビティを呼び出す必要があるかどうかを判断する必要がある場合は、開始するに確認してください。

アクティビティを再開する場合 (例: ホームに移動してから戻る) には当てはまらないと思いますが、元の場所から再開する必要があります (私が言えることはB )。Aに戻ることはありません。そして、あなたは多くの詳細を与えなかったので、これはevilmage93が言ったようなある種のスプラッシュスクリーンだと思います.

それが実際にある種のスプラッシュ スクリーンである場合は、ユーザーがアプリをタスク スタックから削除するためにずっと戻ってきたときはいつでもそれを表示することをお勧めします (彼のアドバイスに反して)。つまり、ユーザーがアプリを「玄関」から再起動するたびに。

これは最終的には設計上の決定ですが、アプリが初めてスタックに読み込まれる (「入力される」) ときはいつでもスプラッシュ スクリーンを表示すること好みます。スプラッシュ画面はfinish、最初の実行時であっても、完了すると自動的に表示されます)。一貫性の問題です。ユーザーが同じタスクを実行するたびに、同じアプリが同じように動作する必要があります (「フロント ドア」からアプリを起動します)。

それでも、あなたがそのように尋ねたので、私はいくつかの一般的な側面をカバーしてあなたの質問に答えました.

// 編集:

最後に、これを見るonCreateWasCalledAlreadyBooleanと、アクティビティのライフ サイクル メカニズムの一部を再発明しようとしている可能性があります。この場合、してはいけないこと: ユーザーはその動作を期待しているため、通常のアクティビティ ロジックを続行します。通常、アクティビティがシステムによって強制終了され、再起動されたという理由だけで、アクティビティの通常の読み込みを中断するようにアドバイスすることはありません。

于 2012-06-19T04:19:35.507 に答える
-1

理由がわかりません。ただし、アクティビティをまったく再開しない方が簡単ではないでしょうか?

大丈夫ではないことについて何を心配していますか?パフォーマンス..キャッチされない例外..コードの明快さ?

于 2012-06-19T01:17:43.673 に答える