1

我在活动中有一个非常实用的函数,它在过去采用静态日期,将其格式化为相对字符串,使用DateUtils.getRelativeDateTimeString(所以它变成类似 "3 minutes ago" 并将其设置为 a TextView。但是,我希望它TextView保持更新只要活动保持开放。

如何制作一个连续运行(无限循环)或在短时间内运行的连续任务 - 就像每秒一样。如何在不进入后台服务等的情况下做到这一点?

4

2 回答 2

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()

于 2012-10-07T21:43:59.470 回答
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();

请参阅:如何在 Android 中运行 Runnable 线程?

使用线程请确保当应用程序暂停或恢复时,您适当地暂停或恢复您的线程。为了处理您可能需要的任何数据,在活动生命周期结束时自行结束它们也是一个好主意

于 2012-10-07T21:16:34.493 回答