通常在使用service更新应用时最常出现的问题就是Notification进度的更新问题、service在什么时间关闭以及需要我们自己在Service中创建新的线程处理耗时 *** 作,当然这种也是可以实现的但是会显得略微繁琐
经过对比发现可以使用IntentService已经实现了对耗时 *** 作的包装出来,我们只需要实现IntentService中的onHandleIntent方法就可以在其中进行耗时 *** 作的处理,在处理下载问题时发现在使用intentservice时暂时没有发现可以优雅的进行进度回调的实现方法,所以我这边使用了本地广播的形式来进行进度刷新。
添加了当前状态判断,当应用处于前台状态时直接进行安装,当应用处于后台时d出notificationd窗点击后安装,示例如下图:
先创建广播
public static class MybroadcastReceiver extends broadcastReceiver { @OverrIDe public voID onReceive(Context context,Intent intent) { switch (intent.getAction()) { case ACTION_TYPE_PREPARE: if (downloadCallback != null) { downloadCallback.onPrepare(); } break; case ACTION_TYPE_PROGRESS: int progress = intent.getIntExtra("progress",0);// Log.d("progress","|- " + progress + " -|"); if (downloadCallback != null) { downloadCallback.onProgress(progress); } break; case ACTION_TYPE_COMPLETE: String file_path = intent.getStringExtra("file_path"); if (!TextUtils.isEmpty(file_path)) { file file = new file(file_path); if (file.exists()) { if (downloadCallback != null) { downloadCallback.onComplete(file); } } } break; case ACTION_TYPE_FAIL: String error = intent.getStringExtra("error"); if (downloadCallback != null) { downloadCallback.onFail(error + ""); } break; } }
然后在IntentService中初始化本地广播并发送信息
@OverrIDe public voID onCreate() { super.onCreate(); mLocalbroadcastManager = LocalbroadcastManager.getInstance(this); } // 在下载进度刷新的地方进行回调 private voID progress(int progress) { Intent intent = new Intent(fileDownloaderManager.ACTION_TYPE_PROGRESS); intent.putExtra("progress",progress); mLocalbroadcastManager.sendbroadcast(intent); } private voID downApk(String url) { ..... ..... progress(progress); ..... ..... }
在activity中使用
mLocalbroadcastManager = LocalbroadcastManager.getInstance(mContext);mbroadcastReceiver = new MybroadcastReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(ACTION_TYPE_PREPARE);intentFilter.addAction(ACTION_TYPE_PROGRESS);intentFilter.addAction(ACTION_TYPE_COMPLETE);intentFilter.addAction(ACTION_TYPE_FAIL);mLocalbroadcastManager.registerReceiver(mbroadcastReceiver,intentFilter);// ondestory时调用mLocalbroadcastManager.unregisterReceiver(mbroadcastReceiver);
以上源码已进行封装,方便使用具体 *** 作步骤如下:
|- 初始化及注册回调
//初始化文件下载管理类fileDownloaderManager.init(context)// 注册下载进度监听,并开启广播接收fileDownloaderManager.registerDownload(object : fileDownloaderManager.DownloadCallback { overrIDe fun onComplete(file: file) = mainVIEw.downloadSucc(file) overrIDe fun onFail(msg: String?) = Unit overrIDe fun onProgress(progress: Int) = mainVIEw.onProgress(progress) overrIDe fun onPrepare() = Unit })//开始下载fileDownloaderManager.download(url)
|- 在下载完成后进行资源重置
fileDownloaderManager.unbinder()
源码地址:源码地址
文档地址:文档地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
您可能感兴趣的文章:Android实现检查并下载APK更新、安装APK及获取网络信息的方法 总结以上是内存溢出为你收集整理的Android使用IntentService进行apk更新示例代码全部内容,希望文章能够帮你解决Android使用IntentService进行apk更新示例代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)