android - 关于线程和延迟时间

标签 android multithreading delay

我做了这个小代码:

public class Game1Activity extends Activity {

/** Called when the activity is first created. */
private final Handler handler = new Handler();  
private final Runnable run = new Runnable() 
{
    public void run(){
        update();
    }
};


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    update();
}

public void update(){
    try 
    {
        Log.i("update thread", "updated");
    }
    catch (Exception  e)
    {
        Log.i("update thread", "catched an exception!");
    }
    finally 
    {
        handler.postDelayed(run, 33);
    }
  }
}

如您所见,除了它在日志聊天中写入更新外,没有什么特别之处,每 33 毫秒(30 fps)

这是我的问题,如果你可以从日志聊天中看到:

09-15 09:01:05.955: I/update thread(423): updated
09-15 09:01:06.025: I/update thread(423): updated
09-15 09:01:06.097: I/update thread(423): updated
09-15 09:01:06.166: I/update thread(423): updated
09-15 09:01:06.236: I/update thread(423): updated
09-15 09:01:06.305: I/update thread(423): updated
09-15 09:01:06.374: I/update thread(423): updated
09-15 09:01:06.444: I/update thread(423): updated
09-15 09:01:06.513: I/update thread(423): updated

线程大约每 70 毫秒运行一次,是预期时间的两倍! 为什么会这样?我的线程是最基本和最简单的,我怀疑是否有什么可以延迟它

有没有更好的方法让它完全按预期更新?

最佳答案

处理器需要为 Threading 切换内容。 33 毫秒有点低。

如果您使用 300 毫秒,这是一个可接受的值

handler.postDelayed();

如果您想要 30 fps,请尝试延迟 30 毫秒,而不是 1 毫秒。

关于android - 关于线程和延迟时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12436022/

相关文章:

java - Android Firebase 如何从 firebase 获取徽章计数响应

python - 线程在调用 Thread.start 之前开始运行

multithreading - Ubuntu 14.04 上的 Apache Apollo - 无法连接到 Websocket(线程问题?)

android - 在单独的线程上使用 HandlerThread 和 Handler 会卡住 UI 线程

android - 想要延迟 1 秒显示数字

javascript - 选择选项时延迟滚动到 Div ID

android - 使用 AsyncTask 下载图像

java - 如何在ADT中导入.java文件中的所有Android类

java - 如何在 Android 中创建 Fragments 应用程序?

java - 选择 JCombobox 时 GUI 卡住,如何在 ActionListener 中使用条件语句在 Swing 应用程序中使用计时器?