10秒ごとにデータを表示する必要があります。誰もそれを行う方法を教えてもらえますか?
特定の時間間隔でUIを更新するために使用できる別の方法もあります。上記の2つのオプションは正しいですが、状況に応じて、特定の時間間隔でUIを更新する別の方法を使用できます。
以下のように、最初にハンドラーのグローバル変数を1つ宣言して、スレッドからUIコントロールを更新します。
Handler mHandler = new Handler();
次に、1つのスレッドを作成し、whileループを使用して、スレッドのsleepメソッドを使用してタスクを定期的に実行します。
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(10000);
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// Write your code here to update the UI.
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
}
}).start();
おそらく最も簡単なことはこれです:
while(needToDisplayData)
{
displayData(); // display the data
Thread.sleep(10000); // sleep for 10 seconds
}
または、タイマーを使用できます。
int delay = 1000; // delay for 1 sec.
int period = 10000; // repeat every 10 sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
displayData(); // display the data
}
}, delay, period);
ハンドラーを使用する別の方法もあります
final int intervalTime = 10000; // 10 sec
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Display Data here
}
}, intervalTime);
アンドラフは、ハンドラーを定義することで正しい軌道に乗っていました。更新関数を呼び出すハンドラーがある場合は、単純に delay the message をハンドラーに10秒間送信できます。
この方法では、独自のスレッドや、奇妙なエラー、デバッグ、メンテナンスの問題につながるようなものを開始する必要はありません。
ただ電話する:
Handler myHandler = new MyUpdateHandler(GUI to refresh); <- You need to define a own handler that simply calls a update function on your gui.
myHandler.sendMessageDelayed(message, 10000);
これで、10秒後にhandleMessage関数が呼び出されます。更新関数で別のメッセージを送信するだけで、サイクル全体が繰り返し実行される可能性があります
10秒ごとにデータを表示する簡単な方法があります。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launcher);
ActionStartsHere();
}
public void ActionStartsHere() {
againStartGPSAndSendFile();
}
public void againStartGPSAndSendFile() {
new CountDownTimer(11000,10000) {
@Override
public void onTick(long millisUntilFinished) {
// Display Data by Every Ten Second
}
@Override
public void onFinish() {
ActionStartsHere();
}
}.start();
}
このコードを試してみましたonCreate()メソッド内で作成してください
Thread t = new Thread() {
@Override
public void run() {
try {
while (!isInterrupted()) {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
//CALL ANY METHOD OR ANY URL OR FUNCTION or any view
}
});
}
} catch (InterruptedException e) {
}
}
};t.start();