软件自动更新功能思路与开发要点

1.1. 摘要

软件由于功能,版本稳定等原因,用户不能及时地安装最新的软件,本功能提供在线的一键安装功能,这样用户就可以安装最新软件,享受最新软件服务。

 比方:

MM  

知道自己的年龄, mm的年龄需要我们访问,通过比较决定是否采取追求,不然大10岁的你也追吗?.

1.2. 思路

 

1.3. 开发步骤

1.测试接口OK

2.HttpURLConnection发请求 get

3.通过PullParser解析xml得到更新信息

4.通过PackageManager取得本地版本号

5.逻辑判断两个版本号是否要下载

6.下载 弹出框提示框,显示 PorgressDialog,调用安装界面

7.不下载 进入主页

1.4. 开发要点

1.4.1. 联网

>权限

<!-- 网络访问权限 -->
    <uses-permission android:name="android.permission.INTERNET" />

>代码编写  

耗时

// 创建地址对象
URL url = new URL(urlStr);
// 打开链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 参数
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if (conn.getResponseCode() == 200) {
InputStream input = conn.getInputStream();
}

>创建子线程

在项目开发过程中需要区别哪些代码是耗时的需要用异步优化

new Thread() {
public void run() {
try {
Looper.prepare();//Looper轮询器 准备
       //耗时代码
 } catch (Exception e) {
e.printStackTrace();
//异常处理
};
}.start();

1.4.2. 数据解析xml

 //创建解PullParser析器
XmlPullParser parser = Xml.newPullParser();
//设置数据
parser.setInput(input, "UTF-8");
int eventType = XmlPullParser.START_DOCUMENT;
// 逐行
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:// 标签开始
if ("versionCode".equals(parser.getName()//获取标签名
)) {
mUpdateInfo.versionCode = parser.nextText();//获取文本值
...
break;
}
// 执行下一行
eventType = parser.next();
}

1.4.3. IntentFilter参数

思考

想要在Internet查找服务 找地址 带上参数,在Android系统里调用Activity有三个重要参数

Action, Catergory,data

// 查找Activity
Intent intent = new Intent();
// 动作
intent.setAction(Intent.ACTION_VIEW);
// 类别
intent.addCategory(Intent.CATEGORY_DEFAULT);
// apk mimeType "application/vnd.android.Package-archive"
// 参数
intent.setDataAndType(Uri.fromFile(apk), "application/vnd.android.Package-archive");
startActivity(intent);

通过意图过滤器发布Activity

  <activity
            android:name="cn.itcast.safe.act.InstallActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Light.NoTitleBar" >
            <intent-filter>
                <!-- 动作 -->
                <action android:name="android.intent.action.VIEW" />
                <!-- 类别 -->
                <category android:name="android.intent.category.DEFAULT" />
                <!-- 参数 -->
                <data android:mimeType="application/vnd.android.Package-archive" />
            </intent-filter>
        </activity>

1.4.4. Handler界面刷新

原理:

使用

 //Message Message = new Message();
Message Message = hanlder.obtainMessage();//建议使用
//先判断是否在存创建过的Message  如果存就重用 优化内存
Message.what = 1;// 打开对话框
hanlder.sendMessage(Message);

事件处理

// 更新界面
	private Handler hanlder = new Handler() {
		// 回调函数:条件:sendMessage
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 1:// 打话对话框
//操作UI
				openUpdateDialog();
				break;     ......
			}
		};
	};

1.4.5. 两个上下文与注意问题

弹框弹在哪个界面,把这个Activity传递过去这种方说是OK的!!!

AlertDialog.Builder builder = new AlertDialog.Builder(this);

 上下文比较

1.this Activity上下文 弹框弹在哪个Activity上面,把这个Activity传给Dialog 

2.getApplicationContext(); 应用上下文  生命周期长

3.getBaseContext(); // setBaseContext(); 不是Activity

注意:findViewById

findViewById ContentView

view. findViewById  view对象里面找

setProgress在子线程也能用?

TextView  setText();//内部没有用Handler更新

ProgressBar  setProgress();//内部使用Hanlder界面更新 sendMess年龄 可以在子线程里面使用

While的优化

在while循环里使用sendMessage 容易内存OOM OutOfMemorryError内存溢出错误

查看线程是否是main

System.out.println(Thread.currentThread().getName());// main

1.4.6. 本地版本号获取

public int getLocalVersionNumber() {
int versioncode = 1;
// 增删查 PackageDao
try {
// 获取包管理器
PackageManager Manager = getPackageManager();
// 获取版本信息
PackageInfo info = Manager.getPackageInfo(getPackageName(),// 包名
0// 默认0
);
versioncode = info.versionCode;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
System.out.println("本地版本号" + versioncode);
return versioncode;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翁老师的教学团队

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值