我在活动中有一个非常实用的函数,它在过去采用静态日期,将其格式化为相对字符串,使用DateUtils.getRelativeDateTimeString
(所以它变成类似 "3 minutes ago" 并将其设置为 a TextView
。但是,我希望它TextView
保持更新只要活动保持开放。
如何制作一个连续运行(无限循环)或在短时间内运行的连续任务 - 就像每秒一样。如何在不进入后台服务等的情况下做到这一点?
我在活动中有一个非常实用的函数,它在过去采用静态日期,将其格式化为相对字符串,使用DateUtils.getRelativeDateTimeString
(所以它变成类似 "3 minutes ago" 并将其设置为 a TextView
。但是,我希望它TextView
保持更新只要活动保持开放。
如何制作一个连续运行(无限循环)或在短时间内运行的连续任务 - 就像每秒一样。如何在不进入后台服务等的情况下做到这一点?
这是使用 AsyncTask 的示例
private class BackgroundCoversionTask extends AsyncTask< String, String, Void >{
@Override
protected Void doInBackground( String... params ) {
while( !isCancelled() ){
try {
Thread.sleep( 1000 );
} catch ( InterruptedException e ) {
break;
}
//DateUtils.getRelativeDateTimeString( MainActivity.this, time, minResolution, transitionResolution, flags )
// Do something right here
publishProgress( Long.toString( System.currentTimeMillis() ) );
}
return null;
}
@Override
protected void onProgressUpdate( String... values ) {
super.onProgressUpdate( values );
mTextView.setText( values[0] );
}
}
然后如果你想取消任务,调用cancel()
只需在单独的线程上运行它。
Thread thread = new Thread()
{
@Override
public void run() {
try {
while(true) {
sleep(1000);
//Do your date update here
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
请参阅:如何在 Android 中运行 Runnable 线程?
使用线程请确保当应用程序暂停或恢复时,您适当地暂停或恢复您的线程。为了处理您可能需要的任何数据,在活动生命周期结束时自行结束它们也是一个好主意