首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android-Threading:引用线程的视图

Android-Threading:引用线程的视图
EN

Stack Overflow用户
提问于 2010-12-07 17:18:45
回答 2查看 285关注 0票数 0

我尝试在我的Android应用程序中使用线程来获得更好的性能。在onCreate方法中,我启动了两个线程:

代码语言:javascript
复制
 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.play);

    ...

    new Thread(new Runnable() {
        public void run() {
         makeList();
        }
    }).start();

    new Thread(new Runnable() {
        public void run() {
         setChronometer();
        }
    }).start();  
}  

在这些方法中,我更改了视图的一些设置。(无重大事件)

首先是一个天文数字:

代码语言:javascript
复制
 private void setChronometer(){
 time.post(new Runnable() {
         public void run() {
       time.setFormat("Time: %s");
       time.setBase(SystemClock.elapsedRealtime());
       time.start();
         }
       });
 }

第二个ListView

代码语言:javascript
复制
private void makeList(){
  ...
        final ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(...);  

        list.post(new Runnable() {
         public void run() {
          list.setAdapter(listAdapter); 
          list.setOnItemClickListener(new OnItemClickListener() {
     public void onItemClick(AdapterView<?> parent,  View view, int position, long id) {
    ....

         }
       });
 }

Chronometer工作正常,但是makeList()中的操作没有完成。所以我的ListView不工作了!

我的想法是,当活动开始时,定义listView和计时器就不那么重要了,所以我在线程中推迟了它们,目的是让活动启动得更快(性能更好)。

首先,这是一个好主意吗?

其次,为什么我的ListView不工作?当我移除list.post(new Runnable() {时,它可以工作,但我认为这在安卓系统中不是一个好方法。因为现在视图是从线程直接更改的。

第三,什么时候应该使用线程vs.View.post

任何帮助都是最好的,谢谢!

问候FireDragon

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-07 19:03:52

首先要记住的是,UI的元素-您的ViewListView等-只能由您的UI线程(即,您的主线程)访问。如果你想从后台线程修改你的UI,你需要实例化一个Handler (在你的UI线程上)并从你的后台线程向它发送消息和/或可运行的东西。

听起来有点凌乱?幸运的是,安卓包含了一个非常强大的类,叫做AsyncTask,这正是你忙于学习所需要的。你把你的后台线程代码放在它的doInBackground()成员中,在onPostExecute()中进行UI更新,这比摆弄new Thread()Handler等要简单得多。

票数 1
EN

Stack Overflow用户

发布于 2011-01-23 02:41:22

鲁本关于AsyncTask的看法是对的。但是,如果您想了解线程是如何工作的,我已经详细介绍了various approaches on blog。尽管如此,AsyncTask还是不错的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4375030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档