我在活动中有一个非常函数的函数,它在过去采用静态日期,使用DateUtils.getRelativeDateTimeString
将其格式化为相对字符串(因此它变为“3分钟前”并将其设置为{ {1}}。但是,只要活动保持打开,我希望此TextView
保持更新。
如何进行连续运行(无限循环)或在短时间内运行的连续任务 - 例如每秒。如何在不进入后台服务的情况下实现这一目标呢?
答案 0 :(得分:1)
以下是使用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()
答案 1 :(得分:0)
只需在一个单独的线程上运行它。
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();
请参阅:How to run a Runnable thread in Android?
对于线程,请确保在应用暂停或恢复时,您适当地暂停或恢复线程。此外,为了处理您可能需要的任何数据,最好在活动生命周期结束时自行结束它们