如何设计Android中需要从网络获取数据更新组件的最佳实现?
|
声明:不用框架。学习了一段时间,有几个问题没想通:1、网络获取数据,肯定要用回调。但是回调貌似不能控制时间...比如这个请求可能10s后才能获取到数据,那么这10s该如何监控?2、如果是ListView这种含有子项的,每个子项都需要从网络请求,那么是不是有几个子项,就要声明几个Handler? |
免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。
版权声明:作者保留权利,不代表本站立场。
|
|
|
|
|
|
|
- 第一个问题,不太理解你的意思。监控这10s是什么意思,服务器返回数据的快慢是和网络有关了,快慢不定。如果想知道什么时候返回的数据,当数据返回后,callback有几种状态,举个栗子:onSuccess、onError、onFailed。这种情况返回时会调用这函数。
- ListView这种需要一个adapter来控制,在重写getView方法中,可直接修改UI,例如给ImageView设置图片。但是网络请求属于延时操作,不可以在这里设置。你可以开子线程请求网络,在adapter中设置一个handler,网络请求完成发消息通知handler(发的消息附带图片),最后再handler给imageView设置图片
//adapter中的代码@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){……//bitmap是网络请求得到的图片Messagemessage=newMessage();message.obj=bitmap;//message携带图片mHandler.sendMessage(message);……}//handler中重写handleMessage方法@OverridepublicvoidhandleMessage(Messagemsg){imageView.setImageBitmap((Bitmap)msg.obj);}3.*注意*,开发一般不这样写,学习的时候可以这样练习。可以试试第三方图片框架,一句话搞定,例如Picasso、Fresco等等。
【另外提一下】Handler应该这样写(新手如果看不懂的话,在网上多看看、查查吧)
privateMyHandlermHandler=newMyHandler(this);privatestaticclassMyHandlerextendsHandler{privatefinalWeakReferencemActivity;publicMyHandler(MainActivityactivity){//对引用对象进行弱引用,利于java垃圾回收机回收,防止引用对象(例如activity)被关闭后,在内存中//仍然持有引用(例如有个10分钟的延时消息),长期占用内存(activity属于重量级组件,会占用很多内存)mActivity=newWeakReference(activity);}@OverridepublicvoidhandleMessage(Messagemsg){MainActivityactivity=mActivity.get();if(activity!=null){}}} |
|
|
|
|
|
|
|