我开发了一个应用程序,在Android模拟器屏幕中以定义的间隔显示一些文本.我正在Handler上课.以下是我的代码中的代码段:
handler = new Handler();
Runnable r = new Runnable() {
public void run() {
tv.append("Hello World");
}
};
handler.postDelayed(r, 1000);
Run Code Online (Sandbox Code Playgroud)
当我运行此应用程序时,文本只显示一次.为什么?
假设我们有这两个Runnables:
class R1 implements Runnable {
public void run() { … }
…
}
class R2 implements Runnable {
public void run() { … }
…
}
Run Code Online (Sandbox Code Playgroud)
那么这有什么区别:
public static void main() {
R1 r1 = new R1();
R2 r2 = new R2();
r1.run();
r2.run();
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
public static void main() {
R1 r1 = new R1();
R2 r2 = new R2();
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
}
Run Code Online (Sandbox Code Playgroud) 我想要一些代码在后台持续运行.我不想在服务中这样做.还有其他方法吗?
我曾尝试Thread在我的课程中调用课程,Activity但我的Activity遗体在后台停留了一段时间然后停止了.该Thread课程也停止工作.
class testThread implements Runnable {
@Override
public void run() {
File file = new File( Environment.getExternalStorageDirectory(), "/BPCLTracker/gpsdata.txt" );
int i = 0;
RandomAccessFile in = null;
try {
in = new RandomAccessFile( file, "rw" );
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//String line =null;
while ( true ) {
HttpEntity entity = null; …Run Code Online (Sandbox Code Playgroud) 我想知道我handler.post(runnable);应该何时使用,何时使用
new Thread(runnable).start();
在Handler的开发人员文档中提到:
导致Runnable r添加到消息队列中.runnable将在连接此处理程序的线程上运行.
这是否意味着,如果我写onCreate()的Activity类:
Handler handler = new Handler();
handler.post(runnable);
Run Code Online (Sandbox Code Playgroud)
然后runnable将在一个单独的线程或Activity的线程中调用?
我试图理解这里的代码,特别是匿名类
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
final long start = mStartTime;
long millis = SystemClock.uptimeMillis() - start;
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
if (seconds < 10) {
mTimeLabel.setText("" + minutes + ":0" + seconds);
} else {
mTimeLabel.setText("" + minutes + ":" + seconds);
}
mHandler.postAtTime(this,
start + (((minutes * 60) + seconds + 1) * 1000));
}
}; …Run Code Online (Sandbox Code Playgroud)