【发布时间】:2017-10-14 17:35:47
【问题描述】:
我决定简化更新时间算法。到处通过Timer编写算法。但是如果你在主Activity中实现Runnable接口,就可以避免创建额外的对象。
我想要在我打开激活时,时间每秒更新一次。但这不会发生。 通过我创建的标签(ITTERATION),只有一次迭代。 使用来自HERE的示例
我已经伤透了脑筋。 请帮帮我:(
package pac.twoproject;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class Main2Activity extends AppCompatActivity implements Runnable {
private static final String TAG = "ITTERATION";
TextView tv;
String time;
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
tv = (TextView) findViewById(R.id.textView);
//scheduler.scheduleAtFixedRate(this, 0, 10, TimeUnit.MILLISECONDS);
}
@Override
protected void onResume() {
super.onResume();
scheduler.scheduleAtFixedRate(this, 0, 1000, TimeUnit.MILLISECONDS);
}
@Override
public void run() {
time = sdf.format(new Date(System.currentTimeMillis()));
tv.setText(time);
Log.d(TAG, time);
}
}
【问题讨论】:
-
相关? stackoverflow.com/questions/9884246 在调用 tv.setText 之前尝试记录。我怀疑那里抛出了异常
-
我没有得到任何异常。或者日志不显示或者重新显示时间。
-
ScheduledExecutorService抑制异常。更重要的是,在一次异常之后,runnable 默认情况下是未调度的。将你的 run 方法体包装在一个 try-catch 中并自己记录它,看看是否会发生这种情况。 -
Я выталкивал каждую секунду。 Сделал обертку исключения。 Теперь метод 运行 выглядит так:
try {// мониторим код time = sdf.format (новая дата (System.currentTimeMillis ())); Log.d (TAG, время); tv.setText (время); } catch (RuntimeException e) {Log.d (TAG, "" + e); } Log.d (TAG, "1");我收到异常 1 次。 “android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。” 我该如何解决这个问题?链接呢?还是怎么做? -
@worldsender 谢谢你,你帮助了我。我取消了禁食。