Android和线程

时间:2012-04-15 00:50:07

标签: android android-layout

我在android开发和线程方面有两个问题

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

2)如果我有一个主UI线程等待某个变量在它显示一个toast之前被设置,那么我想在sperate线程中有一个while(true)循环来继续检查该变量。现在,如果设置了变量,如何在将显示Toast的第一个线程(UI线程)上调用该方法

非常感谢

4 个答案:

答案 0 :(得分:2)

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

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

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

阅读的好文章是Painless Threading

答案 1 :(得分:1)

永远不会有持续运行的while(true)循环。它会消耗大量的资源,在你的情况下,它可以完成很少的任务。

线程很适合(主要)后台任务和资源密集型任务(因此不会阻止UI线程)。要创建新线程,请使用以下命令:

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

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

答案 2 :(得分:1)

根据您正在使用的应用类型,正确使用Theads可能是快速响应用户界面的关键。

关键规则:
如果您需要访问任何访问文件系统,网络,图像加载或任何需要超过简单值或状态检查的内容,立即启动并在线程中执行该操作。正如这里已经说过的,虽然我自己经常使用,但有很多选项可供选择:

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线程上运行任何不需要的东西。希望有所帮助。

答案 3 :(得分:0)

如果要阻止应用程序出现当前错误或崩溃“应用程序无响应”,则必须使用线程。 当我称之为网络服务地理定位时,我会使用它。

Good frensh文章:

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

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