记,基于Android开发类似于微博的东东时,值得记录的几个问题~

作为一个Java的使用者,在经历了Web到服务端开发的工作后,今年终于开始接触一些android开发方面的工作了。

新的挑战~~最近有一个需求是在应用里开发一个类似于微博的功能模块,说难不难,说易不易~~

作为一名Android上的菜鸟,在开发的过程里还是遇到不少问题的。当然,紧接着的就是一个个的想办法解决问题~~~~~

一直想把过程中遇到的,自己觉得几个比较有意义的问题,及其解决方法记录下来,但苦逼的是最近一直没有多的时间~~~

今天又到了一周一度的美好周末,阳光明媚,那干脆起个早,,来写一写,一来也给自己加深下印象~~~

另外,如果您也是一个刚刚开始接触Android的菜鸟,希望能给您带去一点帮助。

而同时,如果您看到其中的某处应用不当,或者有更好的实现方式,更希望您能不吝指出,帮助我进步~

问题剖析:

开发类似于微博的这种功能,首先想到的,自然就是会用到ListView。那么,这其中会遇到的几个问题在什么地方呢?

1、首先,与普通的ListView定义不同,像微博这种东西,内容存在“不确定性”。这个不确定性是指什么呢?比如,有的微博内容里可能会带有图片,而有的则可能为纯文本;而在带有图片的微博中,图片的数目也是不确定的。所以说,对于界面的定义,自然就不能再仅仅依靠布局文件了。而需要借助代码在类文件中实现“动态加载控件”。

2、第二个问题,也是很常见的问题,就是在该种界面中,通常会包含大量的图片,例如用户头像,微博内容里的图片等等。这个时候自然就需要新开线程去处理从服务器下载图片,并更新界面的操作。也就是所谓的“图片的异步加载”工作。

3、与之伴随而来的,就是关于图片加载的另一个问题,界面里的图片很多。如果每次加载时,我们都要从服务器去下载,首先的问题就是加载的速度;其次这样的实现方式,对于网络资源的使用,只能说“抵制铺张浪费,从我做起”。那么,对应的,就需要实现“图片的缓存”。

4、最后一个想要记录的问题,是比较有意思的问题,也是过程中让我最蛋疼的问题。那就是Android对于ListView控件的“Recycler”机制,导致图片会出现显示错乱的问题。

针对于这些问题,从床上爬起来理一理思路,重写了一个Demo,大体效果如下:

接着,我们就按照开发这个玩意儿的步骤走一遍,然后看针对于上面提出的几点值得注意的问题,其解决之道是什么?

一、布局文件的定义

正如同建筑师们建造一幢精美的建筑,得先画出设计图纸一样。我们既然要开发一个我们自己的“微博”,那我们就先搞出“微博”界面的布局文件。

但针对于这一点并没有太多值得额外提到的地方,只需要按照自己想要的样式来定义自己的布局文件就行了。

二、类的定义

当我们已经有了“设计图”,接下来就是实际的“建筑工作”了。

首先,我们会定义一个继承于Activity的类来关联我们定义的布局文件。

接着,因为我们所定义的微博内容的界面中,使用了ListView控件。而ListView控件的具体内容,则需要由一个Adapter来提供。所以我们还需要定义一个Adpater类。

这时候,我们上面谈到的第一个问题就来了:“内容的不确定性”。基于存在有的微博可能为纯文本,有的带有图片;带有图片的微博中,有的仅仅只有一张图片,有的可能两张,也有可能更多的这种情况。

那么,针对于图片的显示,我们就应该在代码中进行动态的添加对应数目的“ImageView”。

所以,在我们定义的Adpater中的getView方法中,可能会存在类似于这样的代码:

BlogInfo info = blogsDownLoad.get(position);if (convertView == null) {// init item viewconvertView = mInflater.inflate(R.layout.micro_blog_item, null);holder = initViewHolder(convertView);// 如果该条微博还带有图片if (info.getImages() != null && !info.getImages().equals("")) {String[] imageArray = info.getImages().split(";");// 动态加载图片显示控件ImageView imageView = new ImageView(context);imageView.setLayoutParams(new ViewGroup.LayoutParams(250, 250));holder.images_layout.addView(imageView);//…..}convertView.setTag(holder);}现在,简单的来说,我们已经初步解决了关于“动态加载控件的”问题。

而当我们已经定义好了显示微博内容的Adpater之后。我们马上将要面临的就是上面谈到的下一个问题:“图片的异步加载”。

那么,首先我们需要明确的就是,为什么我们要对图片做异步加载?这是因为:

在Android当中,当一个应用程序的组件启动的时候,并且没有其他的应用程序组件在运行时,Android系统就会为该应用程序组件开辟一个新的线程来执行。

默认的情况下,在一个相同Android应用程序当中,其里面的组件都是运行在同一个线程里面的,这个线程我们称之为Main线程。

也站在未路让我牵挂的人。

记,基于Android开发类似于微博的东东时,值得记录的几个问题~

相关文章:

你感兴趣的文章:

标签云: