使用IntentService的特点:
1.不需要开启线程
2.不需要关闭服务,自己会关闭
3.使用单线程下载数据       
(不需要完成线程的编写,直接访问网络就可以获取图片)

因为以上两点都在它的类源码中封装好了。

在面我们看一下它的使用方法。

整体思路:在xml文件中放置一个Button控件,在这个Button点击事件中开启Service。定义一个DownLoadService类,继承IntentService类,在这个类中重写onHandleIntent方法,在这个方法中下载网络图片。注意在清单文件AndroidManifest.xml中,声明访问网络的授权和读取sdcard卡的授权。

activity_main.xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:layout_marginTop="146dp"android:text="使用IntentService下载网络图片" /></RelativeLayout>

MainActivity.java文件:

package com.example.android_intentservice;import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;public class MainActivity extends Activity {private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=(Button)findViewById(R.id.button1);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent intent=new Intent(MainActivity.this,DownLoadService.class);startService(intent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

DownLoadService.java文件:

package com.example.android_intentservice;import java.io.File;
import java.io.FileOutputStream;import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.DefaultedHttpContext;
import org.apache.http.util.EntityUtils;import android.app.IntentService;
import android.content.Intent;
import android.os.Environment;
import android.widget.Toast;
//使用IntentService的特点:
//1.不需要开启线程
//2.不需要关闭服务,自己会关闭
//3.使用单线程下载数据
//(不需要完成线程的编写,直接访问网络就可以获取图片)
//因为以上两点都在它的类源码中封装好了
public class DownLoadService extends IntentService {private final String  IMAGE_PATH="https://www.baidu.com/img/bd_logo1.png";
//  默认这里要传一个参数public DownLoadService() {super("DownLoadService");// TODO Auto-generated constructor stub}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();}@Overrideprotected void onHandleIntent(Intent intent) {// TODO Auto-generated method stubHttpClient httpClient=new DefaultHttpClient();HttpPost post=new HttpPost(IMAGE_PATH);HttpResponse response=null;
//      得到sdcard的存储目录File file=Environment.getExternalStorageDirectory();FileOutputStream outputStream=null;try {response=httpClient.execute(post);if(response.getStatusLine().getStatusCode()==200){byte[] result=EntityUtils.toByteArray(response.getEntity());if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){File new_file=new File(file,"bd_logo1.png");outputStream=new FileOutputStream(new_file);outputStream.write(result,0,result.length);Toast.makeText(getApplicationContext(), "下载文件完毕!!", 1).show();}}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{try {if(outputStream!=null){outputStream.close();}} catch (Exception e2) {// TODO: handle exception}httpClient.getConnectionManager().shutdown();}}}

安卓Service组件使用系列3:使用IntentService下载网络图片相关推荐

  1. 安卓Service组件使用系列2:使用Service下载网络图片并存储于sdCard卡上

    使用启动式Service的方式可以处理网络的数据交互.音乐播放.执行IO操作(这些操作都是来自后台的).下面我们以下载网络图片并存储于sdCard卡为实际应用背景来说明它的使用方法. 整体思路:在xm ...

  2. 安卓控件使用系列17:ImageView获取网络图片

    安卓使用ImageView控件获取网络图片是我们在开发应用程序中常常用到的一个功能,我们来分享一下是怎么实现这一功能的. 这个例子是点击Button按钮,就会按照制定url地址找到图片的位置,并下载绑 ...

  3. 安卓架构组件(1)-App架构指导

    相关文章: [翻译]安卓架构组件(2)-添加组件到你的项目中 [翻译]安卓架构组件(3)-处理生命周期 [翻译]安卓架构组件(4)-LiveData [翻译]安卓架构组件(5)-ViewModel [ ...

  4. Android Service组件实现后台音乐播放

    源码在最后哦! 一.Service组件介绍 1.Service Service它可以在后台执行长时间运行操作而没有用户界面的应用组件,不依赖任何用户界面,例如后台播放音乐,后台下载文件等. 虽然服务是 ...

  5. 安卓Service 详解

     Service全部内容基本会在本篇涉及到,我们将围绕以下主要知识点进行分析: Service简单概述 Service在清单文件中的声明 Service启动服务实现方式及其详解 Service绑定服务 ...

  6. 安卓Service实现通知栏音乐播放器,切换歌曲,类似QQ音乐

    引言: 这样的一个音乐播放器,用到了安卓四大组件的其中三个,等于说是一个比较综合性的小功能.实现方法其实有很多,我这里给出自己的方法,不喜勿喷. 需求分析 1.音乐播放器,那我们需要一个帮助类,来构建 ...

  7. 【Android 进程保活】应用进程拉活 ( 系统 Service 机制拉活 | Service 组件 onStartCommand 方法分析 | 源码资源 )

    文章目录 一. Service 组件 onStartCommand 方法分析 1. onStartCommand 函数返回值分析 2. onStartCommand 函数 START_STICKY_C ...

  8. 【Android 安全】DEX 加密 ( Application 替换 | 分析 Service 组件中调用 getApplication() 获取的 Application 是否替换成功 )

    文章目录 一. Service 中的 getApplication() 方法分析 二. ActivityThread 中的 H 处理 CREATE_SERVICE 消息 三. ActivityThre ...

  9. 安卓四大组件之Activity

    1.Activity简介 它是安卓四大组件之一,用于界面的展示,是最贴切用户的一个组件,所以说它的操作 都与用户密切相关,可以通过setContentView来显示制定控件.通常情况下,在一个安卓应用 ...

最新文章

  1. 读取siftgeo格式文件的matlab程序
  2. java的System.gc()的理解
  3. perl中的q,qq,qw,qr,qx
  4. 网站跨域访问解决方法
  5. linux 服务器长ping 加时间戳;转
  6. 华为2017年营收突破6000亿;阿里巴巴全球总经理离职;亚马逊将关闭音乐存储服务丨价值早报
  7. android自定义起止时间的时间刻度尺,Android 自定义View篇(六)实现时钟表盘效果...
  8. IDEA的Translation翻译插件失效
  9. 【Unity】入门学习笔记180605——游戏动画设计(4)——游戏角色动画基础
  10. 触及办事质量黑白、是否跟商家承诺的一致
  11. Lect1 String相关题目
  12. java如何将mp4写入光盘_iOS - 读取/写入mp4视频的XMP元数据
  13. quartus13波形仿真
  14. tensorflow高阶教程:tf.dynamic_rnn
  15. 数据监控预警系统,实现不同端信息推送
  16. Win10没有安全选项卡怎么办 安全选项卡在哪里
  17. 原生Transform编辑器,这个两个脚本能直接更改检视窗口的Tranform的显示
  18. 前端HTML弹窗的实现
  19. 用IDEA创建java项目并跑起来
  20. 系统盘(c盘)空间清理方法总结

热门文章

  1. 2011级-csdn-java-张侃— JavaWEB开发-国际化(一)
  2. 基于javaweb+jsp的企业车辆管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap Ajax)
  3. excel导入如果是数字类型的poi的cell.getStringCellValue()会报错
  4. 中保研碰撞测试汇总 ---更新至2020.06.10
  5. 菜菜的Python学习日记 | 正则表达式你必须了解的知识点
  6. 【EndNote】文献模板编排语法详解
  7. cmdline(一):cmdline是什么?cmdline怎么添加?
  8. tv189获取影片地址的方法
  9. 中国安防行业发展趋势四大看点
  10. 学习python好就业么