Android的线程问题

dongcx1234567 2014-03-15 07:11:51
问大家一个问题:我在照着mars的视频学那个mp3播放器的小demo,遇到问题,他是2.3的版本所有没事,但是4.0以后就不允许在主线程下载东西了,现在我想要的效果是,点击menu,有一个更新列表的选项,点一下,就显示一个listView,把歌曲的信息全列下来,我虽然实现了,但总觉方法不好,我是这么做的:用java的方式新起了一个线程,然后在选项被点击触发的那个方法里先把另起的线程join,然后在用SimpleAdapter,总感觉不大好,请各位指点一下,有什么其他方法?
...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongcx1234567 2014-03-19
  • 打赏
  • 举报
回复
引用 2 楼 dkdjfkdjfk 的回复:
方法-: 楼主可以使用Handler+Thread来实现,在2.3版本后的android中是不允许在主线程中访问网络的,主要是为了防止出现ANR错误,在android中提供了一种线程间互相通信的机制,而这个机制主要由Handler,Message,Looper,MessageQueue四个对象组成的。楼主可以写一个Handler的子类并且重写他的handlerMessage(Message msg)方法,然后在你的Activity的主线程中实例化你写的Handler的子类对象,开一个子线程用于下载数据,当数据下载完成后新建一个Message对象并把你所下载的数据放在Message中然后调用Handler的sendMessage(Message msg)方法数据发送到主线程,主线程接收到消息后对UI进行更新。 方法二: 使用AsyncTask(是android对Thread+Handler的高级封装)具体使用方法希望楼主参见android官方文档,因为这是android开方者必须要掌握的 最后在说一句,Handler+Thread在android的使用是非常多的,他也是非常重要的,如果楼主想要在从事android开发就必须要搞清楚Handler,Message,Looper,MessageQueue四个对象的关系,这在android面试中是必考的知识点。
谢谢你回复了那么多
KEVIN_CHEN_ 2014-03-16
  • 打赏
  • 举报
回复
方法-: 楼主可以使用Handler+Thread来实现,在2.3版本后的android中是不允许在主线程中访问网络的,主要是为了防止出现ANR错误,在android中提供了一种线程间互相通信的机制,而这个机制主要由Handler,Message,Looper,MessageQueue四个对象组成的。楼主可以写一个Handler的子类并且重写他的handlerMessage(Message msg)方法,然后在你的Activity的主线程中实例化你写的Handler的子类对象,开一个子线程用于下载数据,当数据下载完成后新建一个Message对象并把你所下载的数据放在Message中然后调用Handler的sendMessage(Message msg)方法数据发送到主线程,主线程接收到消息后对UI进行更新。 方法二: 使用AsyncTask(是android对Thread+Handler的高级封装)具体使用方法希望楼主参见android官方文档,因为这是android开方者必须要掌握的 最后在说一句,Handler+Thread在android的使用是非常多的,他也是非常重要的,如果楼主想要在从事android开发就必须要搞清楚Handler,Message,Looper,MessageQueue四个对象的关系,这在android面试中是必考的知识点。
oo笨小孩oo 2014-03-15
  • 打赏
  • 举报
回复
我感觉比较好的方法是后台开启一个service,在这个service中开启线程来执行耗时任务,这样效果比较好

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧