|
|
曾经爱过的南瓜 · Unable to open socket ...· 1 周前 · |
|
|
干练的馒头 · Java处理Exception无法捕获的异常 ...· 1 周前 · |
|
|
温暖的电梯 · 天使家族3d动画-西瓜视频搜索· 1 年前 · |
|
|
乐观的春卷 · 老寒腿一吹空调就痛!试试这招,我妈的膝盖疼真 ...· 2 年前 · |
|
|
瘦瘦的跑步鞋 · 【省426元】日韩漫画_《浪客剑心》(完全版 ...· 2 年前 · |
|
|
孤独的橙子 · 西甲高管:中国球员留洋不应急于登陆欧洲五大联 ...· 2 年前 · |
|
|
沉稳的电梯 · 有哪些和魔术有关的漫画? - 知乎· 2 年前 · |
我开发了一个应用程序,可以在Android模拟器屏幕上以指定的时间间隔显示一些文本。我使用的是
Handler
类。下面是我的代码中的一段代码:
handler = new Handler();
Runnable r = new Runnable() {
public void run() {
tv.append("Hello World");
handler.postDelayed(r, 1000);
当我运行这个应用程序时,文本只显示一次。为什么?
对您的示例的简单修复是:
handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
tv.append("Hello World");
handler.postDelayed(this, 1000);
handler.postDelayed(r, 1000);
或者我们可以使用普通线程(例如,使用原始Runner):
Thread thread = new Thread() {
@Override
public void run() {
try {
while(true) {
sleep(1000);
handler.post(this);
} catch (InterruptedException e) {
e.printStackTrace();
thread.start();
您可以将runnable对象看作是可以发送到消息队列以供执行的命令,而handler仅仅是用于发送该命令的辅助对象。
更多细节在这里 http://developer.android.com/reference/android/os/Handler.html
一个有趣的例子是,您可以连续看到计数器/秒表在单独的线程中运行。还显示了GPS定位。而主活动用户界面线程已经存在。
摘录:
try {
cnt++; scnt++;
now=System.currentTimeMillis();
r=rand.nextInt(6); r++;
loc=lm.getLastKnownLocation(best);
if(loc!=null) {
lat=loc.getLatitude();
lng=loc.getLongitude();
Thread.sleep(100);
handler.sendMessage(handler.obtainMessage());
} catch (InterruptedException e) {
Toast.makeText(this, "Error="+e.toString(), Toast.LENGTH_LONG).show();
}
要查看代码,请参阅此处:
现在在Kotlin中,你可以这样运行线程:
class SimpleRunnable: Runnable {
public override fun run() {
println("${Thread.currentThread()} has run.")
fun main(args: Array<String>) {
val thread = SimpleThread()
thread.start() // Will output: Thread[Thread-0,5,main] has run.
val runnable = SimpleRunnable()
val thread1 = Thread(runnable)
thread1.start() // Will output: Thread[Thread-1,5,main] has run
}
Kotlin
private lateinit var runnable: Runnable
override fun onCreate(savedInstanceState: Bundle?) {
val handler = Handler()
runnable = Runnable {
// do your work
handler.postDelayed(runnable, 2000)
handler.postDelayed(runnable, 2000)
}
Java
Runnable runnable;
Handler handler;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
// do your work
handler.postDelayed(this, 1000);
|
|
曾经爱过的南瓜 · Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can 1 周前 |
|
|
温暖的电梯 · 天使家族3d动画-西瓜视频搜索 1 年前 |
|
|
沉稳的电梯 · 有哪些和魔术有关的漫画? - 知乎 2 年前 |