如何设计Android中需要从网络获取数据更新组件的最佳实现?

声明:不用框架。

学习了一段时间,有几个问题没想通:

1、网络获取数据,肯定要用回调。但是回调貌似不能控制时间...比如这个请求可能10s后才能获取到数据,那么这10s该如何监控?

2、如果是ListView这种含有子项的,每个子项都需要从网络请求,那么是不是有几个子项,就要声明几个Handler?

肆意先生
浏览 2313回答 3
3回答

alionSSS

第一个问题,不太理解你的意思。监控这10s是什么意思,服务器返回数据的快慢是和网络有关了,快慢不定。如果想知道什么时候返回的数据,当数据返回后,callback有几种状态,举个栗子:onSuccess、onError、onFailed。这种情况返回时会调用这函数。ListView这种需要一个adapter来控制,在重写getView方法中,可直接修改UI,例如给ImageView设置图片。但是网络请求属于延时操作,不可以在这里设置。你可以开子线程请求网络,在adapter中设置一个handler,网络请求完成发消息通知handler(发的消息附带图片),最后再handler给imageView设置图片//adapter中的代码 @Override public View getView(int position, View convertView, ViewGroup parent) {     ……     //bitmap是网络请求得到的图片     Message message = new Message();     message.obj = bitmap;//message携带图片     mHandler.sendMessage(message);     …… } //handler中重写handleMessage方法 @Override public void handleMessage(Message msg) {     imageView.setImageBitmap((Bitmap) msg.obj); }3.*注意*,开发一般不这样写,学习的时候可以这样练习。可以试试第三方图片框架,一句话搞定,例如Picasso、Fresco等等。【另外提一下】Handler应该这样写(新手如果看不懂的话,在网上多看看、查查吧)private MyHandler mHandler = new MyHandler(this); private static class MyHandler extends Handler {     private final WeakReference<MainActivity> mActivity;     public MyHandler(MainActivity activity) {         //对引用对象进行弱引用,利于java垃圾回收机回收,防止引用对象(例如activity)被关闭后,在内存中         //仍然持有引用(例如有个10分钟的延时消息),长期占用内存(activity属于重量级组件,会占用很多内存)         mActivity = new WeakReference<>(activity);     }     @Override     public void handleMessage(Message msg) {         MainActivity activity = mActivity.get();         if (activity != null) {                      }     } }

慕村8705556

这个 。。。不懂
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android