当前位置: 首页 > 面试题库 >

新的Runnable()但没有新线程?

殳阳飙
2023-03-14
问题内容

我试图在这里理解代码,特别是匿名类

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));
   }
};

文章说

处理程序将更新代码作为主线程的一部分运行,从而避免了第二个线程的开销。

创建新的Runnable类是否应该创建新的第二个线程?除了能够将Runnable类传递给postAtTime之外,这里Runnable类的目的是什么?

谢谢


问题答案:

Runnable通常用于提供线程应运行的代码,但Runnable它本身与线程无关。它只是一个带有run()方法的对象。

在Android中,Handler该类可用于要求框架稍后在 同一 线程上而不是在另一个线程上运行某些代码。
Runnable用于提供稍后应运行的代码。



 类似资料:
  • 问题内容: 我开发了一个使用GoogleMap的应用程序。我刚刚在Eclipse中更新了Android插件(带有Android L库),并重新导入了GooglePlayService库等。 因此,我重新编译后,在手机(4.4.2中的Sony Xperia Z),GenyMotion Emulator(4.4.2),Nexus 7(4.4.2)上都可以正常工作。但是,它不能在两个Samsung Ga

  • 在使用CPU的高负载应用程序上进行线程转储,我看到很多线程处于这种状态: “ajp executor threads-XXXXXX”prio=10 tid=0x00002b04b8b33801 nid=0x5327可运行[0x0000000000000000]java。lang.Thread。状态:可运行 对我来说,真正奇怪的是根本没有堆栈跟踪,ajp线程的总数高于配置的最大线程数(见下文) 当应

  • 我的Google Glass今天更新到了KitKat,我认为我已经成功地完成并更新了Eclipse,但是Eclipse在更新引入GDK的新方法上出现了错误。例如,部分更新是 setText()期望java.lang.CharSequence 所以,我把代码从 card.set文本(some_String); 到 card.set文本(some_CharSequence); 然而,当我这样做时,ec

  • 问题内容: 通过网络嵌套更新,打印“ abc已更新”,但实际值在Redis数据库中不更新。 注意:-上面的代码在localhost上有效,但更新未在heroku-redistogo上显示。 编辑:-我在本地主机上运行代码,redis连接到Redistogo。使用以下代码:- 设置快速会议:- 我还使用以下代码创建了另一个redisClient: 问题答案: 在Heroku上运行此代码时,您是否在控

  • 我已经发现了其他类似于我的问题,但找不到解决办法。我有一个带有简单和配置的自定义小部件。问题是: > 将小部件添加到homescreen时,会出现配置活动,但是一旦创建了配置活动,就会立即运行的方法。它应该在按确定按钮关闭配置活动后运行。 即使方法在配置活动启动时运行(根据方法中的Toast显示textview的正确数据),textview仍然没有更新。 即使Android:UpdatePerio