1

MIDlet コンストラクターでスレッドをインスタンス化して開始する J2ME アプリケーションを作成しました。
[スレッドは、MIDlet の起動時に開始する必要があり、MIDlet のライフサイクル全体で実行され続けます]

今、そのアプリを Android プラットフォームに移植することにしました。そしてActivityクラスを書きました。

今Androidでこのスレッドをインスタンス化するのに最適な場所は?

1)Androidのコンストラクターは方法ではありません

2) OnCreate() が複数回呼び出されます。画面の向きが変わったときなど

3) イベントで宣言することはできません

4

1 に答える 1

0

スレッドで何をする必要があるかによって異なります。

最初のアクティビティのonCreate()でインスタンス化してから、静的(クラス)変数に格納できます。次に、向きの変更によってアクティビティが破棄されて再作成されたonCreate()場合、その変数がまだアクティブなスレッドを指しているかどうかを確認し、必要に応じてインスタンス化するかどうかを確認できます。

もう1つの選択肢は、OSがonRetainNonConfigurationInstance()アクティビティを破棄する前に呼び出したときに、スレッドへの参照を返すことです(方向の変更のためにスレッドを再作成する場合)。OSがアクティビティを再作成したら、onCreate()を呼び出しgetLastNonConfigurationInstance()てスレッドを回復できます。これは、OSがオブジェクトを破棄して再作成するときに、アクティビティのインスタンス間で有効期間の長いオブジェクト(スレッド、接続など)を渡す簡単な方法です。

nonConfigurationInstanceのものは4.0で非推奨になり、Fragmentsを使用して同じことを行うことができます。

于 2012-05-24T10:46:52.963 に答える