0

Android でアクティビティを作成するときは、次のような多くの「ライフサイクル」メソッドをオーバーライドする必要がありonCreateますonActivityResult

class MyAcitivity extends Activity {

    @Override
    public void onCreate(...) {}

    @Override
    public void onStart(...) {}

    @Override
    public void onActivityResult(...) {}

    @Overide
    public void onBackPressed(...) {}
}

論理コードがクラスのいたるところに分割されていることがわかったので、これは好きではありません。このメソッドでいくつかの操作を行いますが、別のメソッドで結果を処理する必要があります。

このようなアクティビティを設計する唯一の方法ですか? スーパークラスのメソッドをオーバーライドせずに同じことができる他のソリューションはありますか?


アップデート

このメソッドでいくつかの操作を行いますが、別のメソッドで結果を処理する必要があります。

例えば:

public void onCreate(...) {
    startActivityForResult(new Intent(this, AnotherAcitity.class), INTENT_ANOTHER);
}

public void onActivityResult(...) {
    if(requestCode == INTENT_ANOTHER)  {
        // do something
    }
}

再度更新

私はこれらのライフサイクル メソッドを使用する方法を知っています。私が考えているのは「設計」です。アクティビティを作成するために「ライフサイクルメソッドをオーバーライド」せずに(理論的には)Androidを設計する別の方法はありますか。モバイルの ios と win8 は android と同じデザインを使用していますか? iOS または Win8 アプリケーションを開発する場合、Android の場合と同様に、あらゆる種類のライフサイクル メソッドをオーバーライドする必要がありますか?

4

3 に答える 3

2

アクティビティで使用しているメソッドをオーバーライドするだけで済みます。そのため、XML に既に入力されているヘルプ ページを簡単なアクティビティで表示する場合は、オーバーライドonCreate()して を呼び出すだけで済みますsetContentView()

一般に、オーバーライドされたメソッドが次のような場合:

public void myOverridenMethod() {
    super.myOverridenMethod();
}

つまり、super 呼び出しだけが含まれているため、オーバーライドする必要はありません。

提供した例では、適切なライフサイクル メソッドをオーバーライドする必要があります。これは、デバイス用のカスタム ROM を開発する意思がない限り、これらの呼び出しは制御できないためです。

編集

Android ライフサイクル メソッドは、アプリのライフサイクルの特定の定義済みポイントでシステムによって呼び出されます。

アクティビティを別の方法で設計することはできません。Android では、どのメソッドが何を行うかがわからないからです。ただし、Android ライフサイクルのどのメソッドをいつ呼び出すかを正確に認識しています。これらの代わりに独自のメソッドを使用することで、Android が対話できないアプリを作成できます。

さらに、 etc. のような多くのライフサイクル メソッドonCreate()は、アプリの初期ビットをセットアップするのに役立ちます (取得などContext)。

iOS と Windows Phone と BlackBerry には同様のライフサイクル メソッドがありますが、すべてが異なるプラットフォームであり、アプリの処理方法が異なるため、常に Android と完全に同等であるとは限りません。

于 2012-12-15T08:44:42.870 に答える
1

これは単なる一般的なフレームワーク パターンです。フレームワークはユーザーに依存せず、通知するだけです。すべてのアクションはフレームワークのオプションです。それは制御の反転と呼ばれます。

これは、アプリケーションに関するすべてを決定し、フレームワークにコマンドを与える直接的なスタイルのプログラミングとは正反対です。

Google の開発者が Activity クラスを設計し、Android はそれらを介してのみ動作します。Android は、いつでもこれらのメソッドを呼び出します。Android は、これらのメソッドで何を行うかは気にしません。ライフ サイクル イベントを通知するだけです。

すべてがオプションなので、本当に興味のある場所に入力するだけで済みます。空のアクティビティは問題なく実行されます。

 public class MyActivity extends Activity { }

追加の処理が必要な場合は、正しい場所にコードを追加してください:

 public class MyActivity extends Activity { 
   @Override
   public void onCreate(...) {
      //---whatever you want to do in this stage of life cycle----
   }
 }
于 2012-12-15T09:00:58.833 に答える
0

アクティビティのライフサイクルのすべてのメソッドを必ずしもオーバーライドする必要はありません。それらはすべて特定の目的のためです

onCreate() :

アクティビティが最初に作成されたときに呼び出されます。ビューの作成、リストへのデータのバインドなど、通常の静的設定はすべてここで行う必要があります。このメソッドは、アクティビティの以前に凍結された状態があれば、それを含むバンドルも提供します。常に onStart() が続きます。

onRestart() :

アクティビティが停止された後、再開される前に呼び出されます。常に onStart() が続きます

onStart() :

アクティビティがユーザーに表示されるようになったときに呼び出されます。アクティビティがフォアグラウンドになった場合は onResume() が続き、非表示になった場合は onStop() が続きます。

onResume() :

アクティビティがユーザーとの対話を開始するときに呼び出されます。この時点で、アクティビティはアクティビティ スタックの一番上にあり、ユーザー入力がそこに送られます。常に onPause() が続きます。

onPause () :

アクティビティがバックグラウンドに移行するときに、アクティビティ ライフサイクルの一部として呼び出されますが、(まだ) 強制終了されていません。onResume() に対応するものです。アクティビティ B がアクティビティ A の前に起動されると、このコールバックが A で呼び出されます。B は、A の onPause() が戻るまで作成されないため、ここで長いことを行わないようにしてください。

onStop() :

ユーザーから見えなくなったときに呼び出されます。その後のユーザー アクティビティに応じて、次に onRestart()、onDestroy() を受け取るか、何も受け取りません。

onPause() メソッドが呼び出された後にアクティビティのプロセスを実行し続けるのに十分なメモリがシステムにないメモリ不足の状況では、このメソッドは呼び出されないことに注意してください。

onDestroy() :

アクティビティが破棄される前に受け取る最後の電話。これは、アクティビティが終了している (finish() が呼び出された) ため、またはシステムがスペースを節約するためにアクティビティのこのインスタンスを一時的に破棄しているために発生する可能性があります。これら 2 つのシナリオは、isFinishing() メソッドで区別できます。

于 2012-12-15T08:54:03.550 に答える