zoukankan      html  css  js  c++  java
  • Android「后台下载」Feb.24小记

    参考了CSDN上的这个文章(HERE),之前只是新开一个线程:

    public class DownloadThread implements Runnable{
          String tarFile ; 
          public void setTar(String tarFile)
          {
              this.tarFile = tarFile ; //在Activity和线程之间传值
          }
    
        @Override
        public void run() {
    ..............
    ..............

    后来看了人家写的那个例子,想把人家Service里面的东西直接复制到我的Thread里面,发现老问题,很多对象是在Activity里定义的,不能在Thread里调用。

    于是想到用Thread直接调用人家的Service,发现Intent是在Activity之间传值的(后来发现也可以在Activity和Service之间传值),不能在Thread和Service之间传值。

    此刻心中已经又万匹草泥马呼啸而过了,但还是决定用SharedPreferences传值。结果发现,这个类需要用到context,which,Thread里面还是没有。。。

    我只想说Thread里面写东西真是越少越好。。

    最后直接在Activity里调用了Service,并且用Intent传值,如下:

                Intent it = new Intent(MainActivity.this,ServiceOne.class);
                it.putExtra("url", tarFile);
                context.startService(it);

    有人要问我为什么不一开始就在Activity里调用Service呢?因为4.0以后网络操作都是不能放在主线程里的,要单开线程,所以没有考虑到。

    但是转念一想,那为什么作者的程序可以呢?仔细看了一下,发现作者的新线程是这么写的,在Service里面!值得学习。

    //下载更新文件
    private void downFile(final String url) {
       new Thread() {
             public void run(){
                 try {     
                       HttpClient client = new DefaultHttpClient();     
                      // params[0]代表连接的url     
                     HttpGet get = new HttpGet(url);   

    另外,这是下载完成后安装的功能:

                                    //下载完成后清除所有下载信息,执行安装提示
                                   download_precent=0;
                                   nm.cancel(notificationId);
                                   Instanll((File)msg.obj,context);

    End.

  • 相关阅读:
    .net Core
    4.1 愚人节
    迷茫了....
    关于Plupload结合上传插件jquery.plupload.queue的使用
    兼容浏览器 回车键 keydown事件
    JS判断是否是IE浏览器的几种方式
    IE IE8 iframe的onload方法分析 IE浏览器onload事件失效
    java 获取请求的完整url地址
    SQLSERVER 数据库基础操作
    java 四舍五入 保留两位小数
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/3565029.html
Copyright © 2011-2022 走看看