Android 为什么我会得到;致命异常:Thread-2723“;将文本添加到String.format时?
我有一个可运行的计时器线程:Android 为什么我会得到;致命异常:Thread-2723“;将文本添加到String.format时?,android,Android,我有一个可运行的计时器线程: private Runnable updateTimerThreadRecording = new Runnable() { public void run() { timeInMilliseconds = SystemClock.uptimeMillis() - startTime; updatedTime = timeSwapBuff + timeInMilliseconds;
private Runnable updateTimerThreadRecording = new Runnable() {
public void run() {
timeInMilliseconds = SystemClock.uptimeMillis() - startTime;
updatedTime = timeSwapBuff + timeInMilliseconds;
int secs = (int) (timeInMilliseconds / 1000);
int mins = secs / 60;
secs = secs % 60;
int hours = mins / 60;
mins = mins % 60;
String timer = "Recording Time: " + String.format("%02d", hours) + ":" + String.format("%02d", mins) + ":" + String.format("%02d", secs);
timerValueRecord.setText(timer);
customHandler.postDelayed(this, 1000);
}
};
我补充的是:“录制时间:”
字符串计时器的原始行为:
String timer = "" + String.format("%02d", hours) + ":" + String.format("%02d", mins) + ":" + String.format("%02d", secs);
但由于我增加了录音时间:
我得到了这个例外。我试图在“%02d”之前以String.format添加此文本,但出现了相同的异常
没有它,就像原始线路一样,也没有例外。
没有我添加的文本,它运行良好,我看到的是:00:00:00,它正在数秒。但是我现在想添加一个文本,这样它在timerValueRecord文本视图上看起来就像这样:录制时间:00:00:00
这是Logcat:
11-16 19:18:46.505 20569-20753/com.test.webservertest E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-2723
Process: com.test.webservertest, PID: 20569
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6334)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:890)
at android.view.View.requestLayout(View.java:17407)
at android.view.View.requestLayout(View.java:17407)
at android.view.View.requestLayout(View.java:17407)
at android.view.View.requestLayout(View.java:17407)
at android.view.View.requestLayout(View.java:17407)
at android.view.View.requestLayout(View.java:17407)
at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:360)
at android.view.View.requestLayout(View.java:17407)
at android.widget.TextView.checkForRelayout(TextView.java:7054)
at android.widget.TextView.setText(TextView.java:4186)
at android.widget.TextView.setText(TextView.java:4044)
at android.widget.TextView.setText(TextView.java:3999)
at com.test.webservertest.MainActivity$1.run(MainActivity.java:230)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at com.test.webservertest.MainActivity$3.run(MainActivity.java:272)
at java.lang.Thread.run(Thread.java:818)
您正在尝试修改另一个线程(您的可运行线程)中的视图字段。Android不接受这一点,您需要将此更改委派给您在UI上使用的线程。问题不在
字符串中。格式在timerValueRecord.setText(计时器)中代码>您可以尝试使用发布您的runnable。到目前为止,我还不知道这样做的性能问题,但请注意。您不能使用线程来更新ui。所以定时器
/定时器任务
、原始线程
和任何创建线程的东西都是禁忌。幸运的是,重复的任务不需要线程:或者使用millisInFuture
设置为Long.MAX\u值的线程,这样它就永远不会用完。