あなたのonCreate()方法にはいくつかの大きな欠陥があります:
1)アクティビティをonCreate 準備します-このメソッドが終了するまで、ここで行うことは何もユーザーに表示されません!たとえば、最後の変更のみが描画されてユーザーに表示されるため、TextViewここでのテキストを1回以上変更することはできません。
2)Androidプログラムは、デフォルトでは1つのスレッドでのみ実行されることに注意してください。したがって、UIを担当するメインスレッドで使用したり、使用しThread.sleep()たりしないでください。Thread.wait()(詳細については、 「アプリの応答性を維持する」をお読みください!)
アクティビティの初期化は次のとおりです。
- 理由もなく、新しい
TextViewオブジェクトを作成しますt。
TextView後で変数でレイアウトを選択しますt。
- のテキストを設定します(ただし、注意してください。終了してアプリケーションのメインイベントループが実行された後に
tのみ表示されます!) onCreate()
- メソッド内で10秒間待機します。これは、すべてのUIアクティビティを停止し、確実にANRを強制するため、絶対に行わないでください(アプリケーションが応答しません。上記のリンクを参照してください)。
onCreate
- 次に、別のテキストを設定します。このテキストは、
onCreate()メソッドが終了し、他のいくつかのアクティビティライフサイクルメソッドが処理されるとすぐに表示されます。
ソリューション:
テキストを一度だけ設定しますonCreate()-これは、表示される最初のテキストである必要があります。
とを作成しRunnableます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()ときにだけ起こります!Androidは、表示されていなくても、長期間存続する可能性があります。ユーザーがそれを再び「開始」すると(そしてそれがまだ存在している場合)、最初のテキストは表示されなくなります。ActivityActivity
=>常にハンドラーをインストールし、 !onResume()で無効にします。そうしないと、まったく表示されていないonPause()ときに「更新」が表示されます。Activityあなたの場合、最初のテキストが再びアクティブ化されたときに再び表示したい場合は、 !onResume()ではなく、に設定する必要があります。onCreate()