android 商城开发,Android 应用商城开发的几个关键技术点
商城项目做了一年多,也维护了这么久,一直想对此总结一下,也让不熟悉的朋友了解一下,应用商城的一些技术难点
其实,开发应用商城,不外乎这么几点:
1: 异步加载app 信息列表, 主要是app的icon加载:
为了app列表滚动刷新流畅,引入了线程池的思想,网络端加载信息的动作都在线程池中进行
外码片段如下:
public class AsyncImageLoader3 {
//为了加快速度,在内存中开启缓存(主要应用于重复图片较多时,或者同一个图片要多次被访问,比如在ListView时来回滚动)
public Map> imageCache = new HashMap>();
private ExecutorService executorService = Executors.newFixedThreadPool(8); //固定五个线程来执行任务
private final Handler handler=new Handler();
/**
*
* @param imageUrl 图像url地址
* @param callback 回调接口
* @return 返回内存中缓存的图像,第一次加载返回null
*/
public Drawable loadDrawable(final String imageUrl, final ImageCallback callback) {
//如果缓存过就从缓存中取出数据
if (imageCache.containsKey(imageUrl)) {
SoftReference softReference = imageCache.get(imageUrl);
if (softReference.get() != null) {
return softReference.get();
}
}
//缓存中没有图像,则从网络上取出数据,并将取出的数据缓存到内存中
executorService.submit(new Runnable() {
public void run() {
try {
final Drawable drawable = Drawable.createFromStream(new URL(imageUrl).openStream(), "image.png");
imageCache.put(imageUrl, new SoftReference(drawable));
handler.post(new Runnable() {
public void run() {
callback.imageLoaded(drawable);
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
return null;
}
//从网络上取数据方法
protected Drawable loadImageFromUrl(String imageUrl) {
try {
return Drawable.createFromStream(new URL(imageUrl).openStream(), "image.png");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//对外界开放的回调接口
public interface ImageCallback {
//注意 此方法是用来设置目标对象的图像资源
public void imageLoaded(Drawable imageDrawable);
}
}
2:app的下载,主要技术点是多线程分段下载
为了加快apk的下载速度,一般网络下载都使用分段下载,将一个网络端文件分成几个小段,每段都由一个独立的线程去下载,然后把下载进程同步到主线程,显示进度, 下面是这一步的关键代码:
int range = fileSize / threadcount;
infos = new ArrayList();
for (int i = 0; i < threadcount - 1; i++) {
DownloadInfo info = new DownloadInfo(i, i * range, (i + 1)* range - 1, 0, urlstr);
infos.add(info);
}
DownloadInfo info = new DownloadInfo(threadcount - 1,(threadcount - 1) * range, fileSize - 1, 0, urlstr);
DownloadInfo 是每一段的信息,包括本段的大小,起止点offset,已经下载的字节数,等等
3:app下载的断点续传...
断点续传主要是用于暂停和下载两种状态的切换,这样保证了暂停下载后,数据有保存,下次接着download的时候 可以不用从0开始了。其实是数据库的思想,关键点就是下载的实时进度保存到数据库中
/**
* 更新数据库中的下载信息
*/
public boolean updataInfos(int threadId, int compeleteSize, String urlstr) {
synchronized (_writeLock){
try{
SQLiteDatabase database = dbHelper.getReadableDatabase();
String sql = "update download_info set compelete_size=? where thread_id=? and url=?";
Object[] bindArgs = { compeleteSize, threadId, urlstr };
database.execSQL(sql, bindArgs);
return true;
}catch(Exception e){
return false;
}
}
}
本步骤设计到数据库的知识,读者可自行网上找寻相关资料
4:还有一点容易被忽略的就是,应用当前的状态管理(下载中,等待中,暂停,安装,下载完成,安装中,已安装,卸载...,更新),
这一步看似无关紧要,却是我改bug最多的地方,需要在前期很好的规划管理才行!
状态的切换涉及到本地应用是否安装,是否是最新版,等等,比如一个应用已经在机器里面安装了,但是网络端有更新的版本,这时app列表里面这个应用的状态就是更新两个字,而如果这个应用未被安装,那么这个应用状态就是下载两个字,诸如此类...
还有一些在测试时比较极端的情况,比如在下载的过程中,在文件管理里面把下载的临时文件删掉,这个时候应用状态的处理等等...这些都是急需要注意的地方。如下是下载中的状态:
最后贴一张局部效果图吧,希望本文可以给需要的读者有所帮助:
如有疑问,本人(xw0326)愿意一起讨论解答:
android 商城开发,Android 应用商城开发的几个关键技术点相关推荐
- Android、IOS手机短视频拍摄、编辑的一些关键技术
对于普通的视频拍摄,特别是对视频大小进行定制裁剪的,iOS对多媒体处理的支持还算比较丰富,Android原生Recorder类并不支持视频比例的设置. 视频的录制: a摒弃原生接口,使用FFmpeg或 ...
- 基于Andro平台的软件开发若干关键技术研究(笔记)
基于Android平台的软件开发若干个关键技术研究 摘要:随着移动智能终端的飞速发展和广泛普及,移动GIS应用正迅速迅速成长,并且成为最有发展前景的热点之一.作为移动GIS应用的分支,基于Androi ...
- 【Android开发】网上商城
[Android开发]网上商城 文章目录 [Android开发]网上商城 一.开发环境需求 二.系统功能设计 三.运行结果 1. 欢迎界面 2. 搜索界面 3. 登录界面 四.主要代码 1. Home ...
- 直播商城开发Android自定义可移动悬浮按钮
在布局文件添加控件时可使用如下方式: <android.support.design.widget.FloatingActionButton......./> 也可使用自定义的包名: co ...
- android listview 自适应列宽_Android 开发技术周报 Issue#272
新闻/News 谷歌Pixel 4a将采用UFS 2.1存储:可以体验全套GMS [图]Android端Play商城现全面开放深色主题 教程/Tutorial OkHttp Interceptor - ...
- 直播商城源码,商城开发实现商城底部导航栏
直播商城源码,商城开发实现商城底部导航栏 1.先写布局. 我新建了一个ShoppingActivity,在activity_shopping.xml文件中,写整体布局,代码如下: <?xml v ...
- 巧用第三方快速开发Android App 热门第三方SDK及框架
巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App ...
- uniapp小程序商城开发thinkphp6积分商城、团购、秒杀 封装APP
uniapp小程序商城开发thinkphp6积分商城.团购.秒杀 封装APP,后台是vue开发 需要源代码的可以联系我,找我要哦 <template><view v-if=" ...
- Android课程设计--网上购物商城
Android的特征: 提供访问硬件的API函数,简化访问过程等 具有自己的运行时和虚拟机 提供了丰富的界面控件供使用者之间调用,加快用户界面的开发速度,保证Android平台上程序界面的一致性 提供 ...
- 个人开发android如何赚钱
先说说本人的情况,09年底开始学习手机开发,先从Brew到Mobile再到Android,android是今年过年回来才算真正开始学的,一边学习一边做原先Brew项目到android的移植,5月中旬的 ...
最新文章
- 巨头垄断,Facebook直接封杀了一个国家!
- C#三层架构第九课之反射和工厂模式实现多数据库访问
- .NET中RabbitMQ的使用
- 前端学习(1318):同步api和异步api
- 网站性能Web压力测试工具webbench
- 中芯国际科创板上市发行价定为27.46元/股,募资或超500亿元
- 一辆车,一年大概要花费多少钱,除了油费?
- c语言中基本数据类型printf()对应格式
- c语言上机填空改错试题,2013年计算机二级C语言上机试题六十二及答案
- 开发经理是否应该写代码?​
- 【Gym-101908 B】Marbles【SG函数】
- kdj买卖指标公式源码_炒股秘籍——KDJ你所不知道的绝密用法(附指标公式源码)...
- Adapter 模式
- luogu 2184 贪婪大陆
- 英语思维导图大全 介词(七)
- java折线图_如何用java 画折线图
- Geek ? 什么是 Geek ? 谁是 Geek ?
- html游戏转wxw,wf.html · wxw婉/flowChart - Gitee.com
- teamviewer存在linux版本_Ubuntu16.04 安装Teamviewer
- IEO大溃败进行时 |链捕手