0

我有 2 个关于 android 开发和线程的问题

1)你认为我什么时候应该在android开发中使用线程?

2)如果我让主 UI 线程在显示 toast 之前等待设置某个变量,那么我考虑在一个单独的线程中设置一个 while(true) 循环来不断检查该变量。现在,如果设置了变量,我如何在第一个线程(UI 线程)上调用将显示 toast 的方法

非常感谢

4

4 回答 4

2

在大多数情况下,不需要直接使用线程。用于线程编程的 android 工具很棒,而且易于使用。

您有大约三个选项可以从另一个线程调用 UI 线程:

  • 处理程序 - 在 UI 线程的另一个线程上设置处理程序,并在需要时向其发送消息。
  • AsyncTask - 在后台执行主要任务,但在完成之前、期间和之后修改 UI。
  • PerformOnUiThread - 使用可运行对象调用此方法以修改 UI 线程上的 UI。

值得阅读的好文章是Painless Threading

于 2012-04-15T00:56:55.047 回答
1

永远不要有一个while(true)连续运行的循环。它会消耗大量资源,并且在您的情况下,完成的很少。

线程适用于(主要)后台任务和资源密集型任务(这样您就不会阻塞 UI 线程)。要创建新线程,请使用以下命令:

new Thread(new Runnable(){
    public void run(){
       //do stuff here.
       }
    }
).start();

您还可以查看 Android AsyncTask 以避免直接使用线程。

于 2012-04-15T00:57:12.573 回答
1

根据您正在使用/使用的应用程序类型,正确使用 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 线程上运行任何不需要的东西。希望有帮助。

于 2012-04-15T02:11:06.370 回答
0

如果要防止应用程序出现当前错误或崩溃“应用程序未响应”,则必须使用线程。我在调用网络服务、地理位置时使用它。

好的法语文章:

http://souissihaythem.blogspot.com/2011/08/application-not-responding.html

http://souissihaythem.blogspot.com/2011/08/application-not-responding-solution.html

于 2012-04-15T11:22:13.703 回答