あなたのonCreate()
方法にはいくつかの大きな欠陥があります:
1)アクティビティをonCreate
準備します。ここで行うことは、このメソッドが完了するまでユーザーには表示されません。たとえば-あなたが変えることができることはありませんTextView
、ここでより多くのテキストをONEのみ最後の変更として、時間が描かれ、ユーザに、見えるようになります!
2)Androidプログラムは、デフォルトでは1つのスレッドでのみ実行されることに注意してください。したがって、UIを担当するメインスレッドで、Thread.sleep()
またはThread.wait()
メインスレッドで使用しないでください。(詳細については、「アプリをレスポンシブに保つ」を読んでください!)
どのようなあなたの初期化、あなたの活動のでないことは次のとおりです。
- 理由もなく、新しい
TextView
オブジェクトを作成しますt
。
TextView
変数のレイアウトはt
後で選択します。
- のテキストを設定します
t
(ただし、 onCreate()
終了してアプリケーションのメインイベントループが実行された後にのみ表示されます!)
- あなたが待つ10秒あなたの内の
onCreate
方法-これが行われてはならない、それはすべてのUIの活動を停止し、間違いなくANR強制されるよう(上記のリンクを参照してください、アプリケーションが応答しないと!)
- 次に、別のテキストを設定します。これは、
onCreate()
メソッドが終了し、他のいくつかのアクティビティライフサイクルメソッドが処理されるとすぐに表示されます。
ソリューション:
テキストを一度だけ設定しますonCreate()
-これは、表示される最初のテキストでなければなりません。
a Runnable
とaを作成するHandler
private final Runnable mUpdateUITimerTask = new Runnable() {
public void run() {
// do whatever you want to change here, like:
t.setText("Second text to display!");
}
};
private final Handler mHandler = new Handler();
この実行可能ファイルをハンドラーとしてインストールしますonCreate()
(以下のアドバイスを読んでください)。
// run the mUpdateUITimerTask's run() method in 10 seconds from now
mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
アドバイス:Activity
のライフサイクルを必ず知っておいてください!あなたがそのようなことをonCreate()
すると、これはあなたActivity
が最初に作成されたときにのみ起こります!AndroidはActivity
、たとえ表示されていなくても、おそらくより長く生き続けるでしょう。ユーザーがもう一度「開始」すると、それがまだ存在している場合は、最初のテキストが表示されなくなります。
=>にハンドラを常にインストールしonResume()
て無効にしてonPause()
ください!それ以外の場合は、あなたActivity
がまったく表示されないときに「更新」を取得します!あなたの場合、最初のテキストが再びアクティブになったときにもう一度表示したい場合はonResume()
、ではなく、で設定する必要がありますonCreate()
。
.setText()
は、「ウィジェット」全体を、設定するように指示したテキストに置き換えるためです。あなたがすでにそこに置いたテキストを含む。