我有 2 个关于 android 开发和线程的问题
1)你认为我什么时候应该在android开发中使用线程?
2)如果我让主 UI 线程在显示 toast 之前等待设置某个变量,那么我考虑在一个单独的线程中设置一个 while(true) 循环来不断检查该变量。现在,如果设置了变量,我如何在第一个线程(UI 线程)上调用将显示 toast 的方法
非常感谢
我有 2 个关于 android 开发和线程的问题
1)你认为我什么时候应该在android开发中使用线程?
2)如果我让主 UI 线程在显示 toast 之前等待设置某个变量,那么我考虑在一个单独的线程中设置一个 while(true) 循环来不断检查该变量。现在,如果设置了变量,我如何在第一个线程(UI 线程)上调用将显示 toast 的方法
非常感谢
在大多数情况下,不需要直接使用线程。用于线程编程的 android 工具很棒,而且易于使用。
您有大约三个选项可以从另一个线程调用 UI 线程:
值得阅读的好文章是Painless Threading。
永远不要有一个while(true)
连续运行的循环。它会消耗大量资源,并且在您的情况下,完成的很少。
线程适用于(主要)后台任务和资源密集型任务(这样您就不会阻塞 UI 线程)。要创建新线程,请使用以下命令:
new Thread(new Runnable(){
public void run(){
//do stuff here.
}
}
).start();
您还可以查看 Android AsyncTask 以避免直接使用线程。
根据您正在使用/使用的应用程序类型,正确使用 Theads 可能是拥有快速响应式 UI 的关键。
关键规则:
如果您需要访问文件系统、网络、图像加载或任何需要不仅仅是简单的值或状态检查的任何内容,请立即启动并在线程中执行该工作。正如这里已经说过的,有许多选项可用,尽管我自己通常使用:
change_UI_if_needed_to_indicate_click_response();
new Thread(new Runnable(){
do stuff here ;
}).start()
您还可以像这样使用标准(非内联)线程对象。
这可能是不好的做法,我不知道。无论如何,它对我来说效果很好,并不是你问题的重点。
如果您想使用标准 Java 在 UI 线程上运行某些东西,而不是专门允许此类事情的专用 Android 对象,则每个视图都附加了一个 post(Runnable) 方法。对我来说,这是最容易将代码返回到 UI 线程的方法。
myView.post(new Runnable{
codeForUI();
});
我的一般规则是尽量不要在 UI 线程上运行任何不需要的东西。希望有帮助。
如果要防止应用程序出现当前错误或崩溃“应用程序未响应”,则必须使用线程。我在调用网络服务、地理位置时使用它。
好的法语文章:
http://souissihaythem.blogspot.com/2011/08/application-not-responding.html
http://souissihaythem.blogspot.com/2011/08/application-not-responding-solution.html