Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208403
  • 博文数量: 102
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1015
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-05 16:45
文章存档

2014年(73)

2013年(29)

我的朋友

分类: Android平台

2014-04-06 17:01:41

Mp3Player(10) DownloadService、Service、Runnable

点击(此处)折叠或打开

  1. //DownloadService.java
  2. package com.lwb.mp3player.service;

  3. import com.lwb.download.HttpDownloader;
  4. import com.lwb.model.Mp3Info;

  5. import android.app.Service;
  6. import android.content.Intent;
  7. import android.os.IBinder;

  8. public class DownloadService extends Service{
  9.     @Override
  10.     public IBinder onBind(Intent arg0) {
  11.         return null;
  12.     }
  13.     
  14.     /*每次用户点击ListActivity当中的一个条目时,
  15.      * 就会调用该方法 onStartCommand(Intent,int flags,int startId)
  16.      * 取出被点击的对象并创建线程进行下载
  17.      * 1、从intent取出mp3Info内容:mp3Info =(mp3Info)intent.getSerialzableExtra("mp3Info")
  18.      * 2、创建一个下载线程new DownloadThread(mp3Info);,这个对象是自定义的 传入的是mp3Info内容
  19.      * 3、创建一个Thread线程对象,传入是的参数是 下载线程对象downloadThread
  20.      * downloadThread上面虽然实现了Runnable接口,但还是要放到thread中的,记住啦
  21.      * 4、启动线程thread.start()
  22.      * */
  23.     @Override
  24.     public int onStartCommand(Intent intent, int flags, int startId) {
  25.         //从intent当中将Mp3Info对象取出
  26.         Mp3Info mp3Info = (Mp3Info)intent.getSerializableExtra("mp3Info");
  27.         //生成一个下载线程,并将Mp3Info对象作为参数传递到线程对象当中
  28.         DownloadThread downloadThread = new DownloadThread(mp3Info);
  29.         //其中线程
  30.         Thread thread =new Thread(downloadThread);
  31.         thread.start();
  32.         return super.onStartCommand(intent, flags, startId);
  33.     }
  34.     
  35.     /*定义一个DownloadThread线程类,实现了Runnable接口,并复写了启动的run()实体
  36.      * run()实现下载文件的功能
  37.      * 1、创建httpDownloader对象new HttpDownloader();
  38.      * 2、调用HttpDownloader对象中的downFile()方法:httpDownloader.downFile(mp3Url,"mp3/",mp3Info.getMp3Name());
  39.      *      该方法直接把在mp3Url中的文件mp3Info.getMp3Name()下载SD卡中的mp3/目录下
  40.      * */
  41.     
  42.    /*在程序开发中只要是多线程肯定永远以实现Runnable接口为主,
  43.     * 因为实现Runnable接口相比继承Thread类有如下好处:
  44.     * 避免点继承的局限,一个类可以继承多个接口。
  45.     * 适合于资源的共享
  46.     * 详细出处参考:*/
  47.     class DownloadThread implements Runnable{
  48.         private Mp3Info mp3Info = null;
  49.         public DownloadThread(Mp3Info mp3Info){
  50.             this.mp3Info= mp3Info;
  51.         }
  52.         
  53.         @Override
  54.         public void run() {
  55.             //下载地址
  56.             //根据mp3文件的名字,生成下载下载地址
  57.             String mp3Url = ""+mp3Info.getMp3Name();
  58.             //生成下载文件所用的对象
  59.             HttpDownloader httpDownloader = new HttpDownloader();
  60.             //将文件下载下来,存储在SDCard当中
  61.             int result = httpDownloader.downFile(mp3Url,"mp3/",mp3Info.getMp3Name());
  62.             String resultMessage = null;
  63.             if(result==-1){
  64.                 resultMessage="下载失败";                        
  65.             }
  66.             else if(result ==1){
  67.                 resultMessage ="文件已经存在,不需下载";
  68.             }
  69.             else if(result == 0){
  70.                 resultMessage ="文件下载成功";
  71.             }
  72.         }        
  73.     }
  74. }

阅读(568) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~