在学习了javaSE过后,现在开始继续我的android生活,之前学习完JavaSE,通过UI界面做过模拟游戏《贪吃蛇》和基本版计算器,现在学习Android接近有20天的时间,开始制作模拟手机助手下载,制作手机助手下载,关键是练习一下listview,和listview一些相关的优化,以及优化所产生的一些bug和解决。

本次需呀用到hfs外部软件,来解决网络的问题,和一些图片,用于下载时候的显示。例如手机qq、微信、等一些软件,

下载软件的时候需要下载是时间,因为我们的main主线程不能做耗时工作,所以下载的时候需要在子线程里面下载,这边需要用的AsyncTask。AsyncTask中的doInBackground是在子线程中下载,onProgressUpdate、onPostExecute(String)和onPostExecute都是在主线程中操作,onProgressUpdate是在doInBackground中下载一半的时候,想要对主线程进行操作,onPostExecute是要进行下载之前才执行,onPostExecute(String)是下载之后才操作。

doInBackground(String)在下载的过程中我们需要传输下载路径。

下载用到URL,例如:URL url = new URL(p_w_picpathUrl);刚开始打开软件的时候,一开始显示整个页面布局,和刚开始我们软件的图标,log。都需要下载,下载图片的用到BitmapFactory,例如:Bitmap bitmap=BitmapFactory.decodeStream(openStream);单下载完成后需要在页面中更改,,因为主线程中不能做页面的更改进行一系列的操作,所以需要在doInBackground中将下载好的bitmap  return到onPostExecute,在onPostExecute中可以对主线程进行做一系列的操作,p_w_picpath.setImageBitmap(result);这样,一开始的基本页面既可以完成,如图:

这些打开软件的是最基本的显示,图标和数据都来自于网络,每次滑动的时候都会不断的下载图标,下载在过的图标他会再次在下载,这个体验是非常不好的。所以我们在下载的图标过后要把bitmap保存起来,当已经下载过的就不要再下载,直接从容器里面取。例如:Bitmap bitmap = p_w_picpathBitmaplist.get(position);在图片bitmap 下载完后就保存起来,不过在我们下载的过程中是需要时间的。所以在现在中如果还是快速的上下滑动还是一样会导致图片多次下载,解决:因为我们在每次下载的时候都会new 出asyncTask 来对我们图片进行下载,例如:MyAsyncTask asyncTask = new MyAsyncTask(p_w_picpath,position);所以我们让new 出的asyncTask 进行有条件的执行,把每一行先对应的asyncTask 进行保存。在每次要下在的时候先看一下容器里面的asyncTask 是否存在,如果存在的话说明正在下载,我们就不用再进行对应的下载。例如:

Bitmap bitmap = p_w_picpathBitmaplist.get(position);

if (bitmap==null) {

MyAsyncTask asyncTask = asyncTasklist.get(position);

if (asyncTask==null) {

asyncTask = new MyAsyncTask(p_w_picpath,position);

asyncTask.execute(p_w_picpathUrllist.get(position));

asyncTasklist.put(position, asyncTask);

}

} else {

p_w_picpath.setImageBitmap(bitmap);

}

这样子就可以在下载的时候避免多次下载图标。

对listview的优化,在每次上下滑动的时候会每次产生一个新的View。所以要对View进行复用,可以用上一个消失的View convertView,来替换这个所要产生新的view。所以可以对convertView进行判断,如果convertView要是为null 的时候我们才创建一个新的View 。要是不为空的话,就直接拿起来复用,这丫可以解决资源问题,不会造成资源浪费。例如:

View inflate =null;

if (convertView==null) {

LayoutInflater layoutInflater = getLayoutInflater();

inflate = layoutInflater.inflate(R.layout.layout, null);

} else {

inflate=convertView;

}

和View 一样,我们每次有声明的一开始声明的

ImageView p_w_picpath = (ImageView) inflate.findViewById(R.id.p_w_picpath);

ProgressBar progressBar1 = (ProgressBar) inflate.findViewById(R.id.progressBar1);

Button button1 = (Button) inflate.findViewById(R.id.button1);

TextView text = (TextView) inflate.findViewById(R.id.textView1);

几个组件,也可以对其复用。把这些都放在一个class里面需要的时候拿出来用就可以,例如:

View inflate =null;

Myview myview =null;

if (convertView==null) {

myview = new Myview();

LayoutInflater layoutInflater = getLayoutInflater();

inflate = layoutInflater.inflate(R.layout.layout, null);

myview.p_w_picpath = (ImageView) inflate.findViewById(R.id.p_w_picpath);

myview.progressBar1 = (ProgressBar) inflate.findViewById(R.id.progressBar1);

myview.button1 = (Button) inflate.findViewById(R.id.button1);

myview.text = (TextView) inflate.findViewById(R.id.textView1);

inflate.setTag(myview);

} else {

inflate=convertView;

myview=(Myview) inflate.getTag();

}

这样的话可以进行多次复用。;

但是由于复用的关系,在每次图片还在下载的过程是如果图片在第一张下载完成后,后面的图片还没有下载的关系,进行上下的滑动。会发现,在发现在底下的时候有出现第一次的图标,在过了一段时间后会发现图片的跳变问题,这个就是因为view复用,例如第7行复用第0行的时候,第7行的图标还没有下载,原先应该是默认的原始图片,但是由于在第0行的时候已经对图标进行更改,他已经不是默认的图标,所以会显示之前的图标,

解决:在一开始要下载图标,更改图片之前把图片先改为我们默认的图片,例如:

myview.p_w_picpath.setImageResource(R.drawable.ic_launcher);

这样只能解决基本的问题,如果一开始只是轻轻滑动的话,是不会出现图标闪变,如果要是一开始的时候在图片还在下载的时候就进行快速的上下滑动的话,这样还是会出现图片闪跳。我们在轻轻滑动的时候他view 的替换是有规律的,但是如果开始滑动的时候view是没有规律,他的出现时不定像的,即在滑动过程中,要对p_w_picpath进行替换。

例如:

public void changview(ImageView p_w_picpath)

{

this.p_w_picpath = p_w_picpath;

}

asyncTask.changview(myview.p_w_picpath);

并且在下载完图片的时候,必须对当前行有显示的才进行更改。

例如:

int fvp = mlistview.getFirstVisiblePosition();

int lvp = mlistview.getLastVisiblePosition();

if (position>=fvp&&position<=lvp) {

//保存bitmap

p_w_picpathBitmaplist.put(position, result);

p_w_picpath.setImageBitmap(result);

}

以上是打开界面时候最基本的显示,一切数据都来自与网络,接下来就是当我们点击按钮下载的时候,会进行基本的文件下载,如同之前的图片下载一样,文件下载是在点击下载后文件才会下载,所有操作如同上面图片基本相同,唯一的就是在点击下载的时候,文件的进度条会跟随的下载进度不断的进行促发。这是需要用到的是onProgressUpdate();在用到onProgressUpdate的时候,数据下载进度是从publishProgress传入;操作代码如;

问题:由于一开始的优化,对view,和基本组件的复用关系,导致了bug,在上下滑动的时候别的地方没有点击下载,他的ProgressBar中的进度条也是显示满格。

解决:

如同图片的一样,定义容器,用于保存,保存当前是否是在下载,下载中,下载成功的三个状态,在对齐做对应的操作,并且与进行替换,操作代码如下:

在这次的模拟手机助手下载,已经基本上都完成了。

转载于:https://blog.51cto.com/10594050/1696494

android之模拟手机助手下载相关推荐

  1. android 仿手机助手下载进度条效果

    今天准备写一个关于类似一般手机助手下载的效果,先看效果就知道了, 实现这个效果要用到Paint类的一个很重要的方法就是setShader(),再加入动画了,使用的是属性动画,现在就动手开始写吧,今天没 ...

  2. 360助手 android版,360手机助手

    360手机助手是奇虎360官方出品的免费手机管理应用,360手机助手是安卓手机用户的防电话骚扰.防垃圾短信的安全管理工具,360手机助手更可以帮您实时监控手机状态.网络速度.流量套餐等使用情况.360 ...

  3. 360手机助手游戏怎么实名认证 360手机助手下载的游戏怎么关了悬浮窗

    360手机助手除了我们日常的传输文件,分享资源之外,上面还是有海量的游戏资源供我们下载的,而且平台还提供360币可以进行充值,不过很多小伙伴在下载游戏之后不知道在哪实名认证,哪里可以改实名认证?下面一 ...

  4. 电视android怎么连接手机助手,微鲸助手怎么连电视 微鲸助手连接使用说明

    微鲸助手是微鲸科技开发的一款专用于微鲸产品的助手软件,可以对微鲸智能电视.微鲸微投.微鲸分体音箱进行操控,帮助用户实现远程遥控,让生活更智能.不少小伙伴在使用时反映微鲸助手连不上电视,下面小编就为大家 ...

  5. 海马苹果助手ipad版_海马手机助手下载|海马手机助手 5.0.1 官方版

    相信这是一款很多人换新机子不会错过的软件,对于大部分用户来说,这款软件的好用程度简直可以说是惊喜的程度.那么问题来了,这简直是同类软件的噩梦啊,因为他,同类软件的生活显然不能说是舒服. 海马手机助手功 ...

  6. win10连接android手机助手下载,完美Win10手机助手电脑版

    完美Win10手机助手不仅可以帮助用户在电脑上管理win10手机,而且还能将apk应用转化为appx格式,这样小伙伴们就不担心win10手机系统上的应用少了. 相关下载: DS应用助手 助手功能: A ...

  7. win10连接android手机助手下载,完美win10手机助手-Win10手机助手v1.0.1 官方免费版下载_飞翔下载...

    飞翔小编非常喜欢研究一些手机系统,虽说用的Iphone,但是对win10的系统很感兴趣啊,所以特意买了个小米4刷win10系统玩..APK转制APPX格式Win10手机直装包.尽情享用安卓百万级应用游 ...

  8. 仿360手机助手下载按钮

    本篇文章已授权微信公众号guolin_blog(郭霖)独家发布 最近在学习android的高级view的绘制,再结合值动画的数据上的改变,自己撸了个360手机助手的下载按钮.先看下原版的360手机助手 ...

  9. android 底部动画,Android实现360手机助手底部的动画菜单

    首先来看下我们实现的效果和360效果的对比: 360手机助手效果演示 本库实现的效果(Icon来自360手机助手,侵删) xml布局文件 注:为了美观,讲每个Button的高度以及固定,设置wrap_ ...

最新文章

  1. 解决:org.xml.sax.SAXParseException: 元素类型 “head“ 必须由匹配的结束标记 “</head>问题
  2. Java中对接钉钉API获取数据流程
  3. 排序算法 —— 选择排序
  4. 线性代数学习笔记(二)
  5. 用户一片哀嚎!三星手机系统突遇大面积崩溃:现黑屏、重启、乱码
  6. matplotlib数据可视化实战——饼状图+雷达图+三维图
  7. 两种常用的启动和关闭MySQL服务
  8. 智能优化算法应用:基于灰狼算法的二维Otsu图像阈值分割-附代码
  9. textjoin去重_Excel 2016新增函数之TEXTJOIN
  10. 腾讯电子签小程序就能开收据了
  11. 测试开发面试题汇总(自用)
  12. Windows下编译apr、apr-util
  13. 文字烫金效果html,一种浮雕烫金效果的收缩套标的制作方法
  14. 360极速浏览器取消默认迅雷下载的正确方法
  15. 虚拟主机怎么用?香港虚拟主机搭建网站教程
  16. excel多窗口显示设置
  17. 新浪微博授权登陆获取个人信息
  18. 华为Watch Buds耳机打电话时效果差、听不清楚声音、通话有杂音是怎么回事?
  19. 转贴:谁说我会画板?
  20. 深度学习中的mask操作

热门文章

  1. 2022年,灵活就业将是普通人抵抗风险的重要机会
  2. windows找不到文件xxxxx请确定文件名是否正确 解决办法
  3. 【OpenGL C++】画一个空心汉字和一个圆,并填充汉字(中点画线法,中点画圆法,种子填充法)
  4. 跨平台C++ Qt数据库管理系统设计与实战:从理论到实践的全面解析
  5. 用Python爬取手机壁纸,太简单了吧
  6. 《大学的意义》一些摘抄和感悟
  7. 触发器的Sd和Rd的作用(转)
  8. 自动驾驶定位技术-马尔科夫定位
  9. C# 输入半径,计算圆的面积和周长
  10. 计算机的基础组成部分