IntentService----意图服务

意图服务是异步进行的  执行完操作后就会自己消毁(onDestroy方法)

本例为点击按钮下载三张图片相当于连续执行三次意图服务中的onStartcommand方法

 1 import android.app.Activity;
 2 import android.content.BroadcastReceiver;
 3 import android.content.Context;
 4 import android.content.Intent;
 5 import android.content.IntentFilter;
 6 import android.graphics.Bitmap;
 7 import android.os.Bundle;
 8 import android.view.View;
 9 import android.widget.ImageView;
10 import android.widget.RelativeLayout;
11
12 public class MainActivity extends Activity {
13
14     private ImageView img1View,img2View,img3View;
15     private RelativeLayout mainLayout;
16
17     private ImgReceiver imgReceiver;
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22
23         mainLayout=(RelativeLayout) findViewById(R.id.mainLayoutId);
24
25         img1View=(ImageView) findViewById(R.id.img1Id);
26         img2View=(ImageView) findViewById(R.id.img2Id);
27         img3View=(ImageView) findViewById(R.id.img3Id);
28
29         img1View.setTag(Config.URL1);
30         img2View.setTag(Config.URL2);
31         img3View.setTag(Config.URL3);
32
33         imgReceiver=new ImgReceiver();
34         registerReceiver(imgReceiver,
35                 new IntentFilter(Config.ACTION_DOWNLOAD_COMPLETED));
36
37     }
38
39     public void startDownload(View view){
40         Intent intent=new Intent(getApplicationContext(),DownloadService.class);
41         intent.putExtra("path", Config.URL1);
42         startService(intent); //涓嬭浇绗竴涓浘鐗?
43         intent.putExtra("path", Config.URL2);
44         startService(intent); //涓嬭浇绗簩涓浘鐗?
45         intent.putExtra("path", Config.URL3);
46         startService(intent); //涓嬭浇绗笁涓浘鐗?
47     }
48
49     @Override
50     protected void onDestroy() {
51         super.onDestroy();
52         unregisterReceiver(imgReceiver); //鍙栨秷娉ㄥ唽骞挎挱鎺ユ敹鍣?
53         }
54
55     class ImgReceiver extends BroadcastReceiver{
56         @Override
57         public void onReceive(Context context, Intent intent) {
58             // TODO 鎺ユ敹鍥剧墖涓嬭浇瀹屾垚鐨勫箍鎾?
59             String url=intent.getStringExtra(Config.EXTRA_URL);
60             Bitmap bitmap=intent.getParcelableExtra(Config.EXTRA_BITMAP);
61
62             //鏍规嵁Url浣滀负鐨勫浘鐗囨帶浠剁殑鏍囩鏌ユ壘鍥剧墖鎺т欢
63             ImageView imgView=(ImageView) mainLayout.findViewWithTag(url);
64             imgView.setImageBitmap(bitmap);
65         }
66     }
67
68 }

MainActivity.java

 1 import java.io.ByteArrayOutputStream;
 2 import java.io.InputStream;
 3 import java.net.HttpURLConnection;
 4 import java.net.URL;
 5
 6 import android.app.IntentService;
 7 import android.content.Intent;
 8 import android.graphics.Bitmap;
 9 import android.graphics.BitmapFactory;
10 import android.util.Log;
11
12 /**
13  * IntentService鏄甫鏈夊瓙绾跨▼鐨勬湇鍔$粍浠讹紝鍏跺唴閮ㄤ娇鐢ㄤ簡鍗曠嚎绋嬫睜妯″紡锛? * 褰撴墍鏈夌殑浠诲姟鎵ц瀹屾垚鍚庯紝浼氳嚜鍔ㄥ叧闂湰鏈嶅姟
14  * 鍏剁敓鍛藉懆鏈熸柟娉曪細
15  *     onCreate()
16  *     onStartCommand()
17  *     onHandleIntent() 鍦ㄥ瓙绾跨▼涓墽琛岀殑鏂规硶
18  *  onDestroy()
19  *
20  * @author apple
21  *
22  */
23 public class DownloadService extends IntentService {
24     public DownloadService(){
25         super(null);//鍙傛暟锛氭槸璁剧疆瀛愮嚎绋嬬殑鍚嶇О
26     }
27
28     @Override
29     public void onCreate() {
30         super.onCreate();
31         Log.i("debug", "--onCreate---");
32     }
33     @Override
34     public int onStartCommand(Intent intent, int flags, int startId) {
35         Log.i("debug", "--onStartCommand---");
36         return super.onStartCommand(intent, flags, startId);
37     }
38
39     @Override
40     protected void onHandleIntent(Intent intent) {
41         // TODO 鍦ㄥ瓙绾跨▼涓墽琛岀殑鏂规硶
42         Log.i("debug", "--onHandleIntent---");
43         //鑾峰彇涓嬭浇鍥剧墖鐨勫湴鍧?
44         String path=intent.getStringExtra("path");
45         try{
46             URL url=new URL(path);
47             HttpURLConnection conn=(HttpURLConnection) url.openConnection();
48             InputStream is=conn.getInputStream();
49             byte[] buffer=new byte[10*1024];//姣忔璇诲彇瀛楄妭鐨勬渶澶ф暟
50             int len=-1;
51
52             ByteArrayOutputStream baos=new ByteArrayOutputStream();
53             if(conn.getResponseCode()==200){
54                 while((len=is.read(buffer))!=-1){
55                     baos.write(buffer, 0, len);
56                 }
57
58                 byte[] bytes=baos.toByteArray();
59                 //灏嗕笅杞藉畬鎴愮殑瀛楄妭鏁扮粍杞垚鍥剧墖瀵硅薄
60                 Bitmap bitmap=BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
61
62                 //灏嗗浘鐗囧璞″彂閫佺粰Activity杩涜鏄剧ず
63                 Intent bitmapIntent=new Intent(Config.ACTION_DOWNLOAD_COMPLETED);
64                 bitmapIntent.putExtra(Config.EXTRA_BITMAP,bitmap);
65                 bitmapIntent.putExtra(Config.EXTRA_URL, path);
66
67                 sendBroadcast(bitmapIntent);
68
69                 Thread.sleep(2000);//浠呮祴璇曟椂浣跨敤
70             }
71
72         }catch(Exception e){
73             e.printStackTrace();
74         }
75
76     }
77
78     @Override
79     public void onDestroy() {
80         super.onDestroy();
81         Log.i("debug", "--onDestroy---");
82     }
83
84 }

DownLoadService.java

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity"
10     android:id="@+id/mainLayoutId">
11
12     <Button
13         android:id="@+id/btnId"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:onClick="startDownload"
17         android:text="开始下载" />
18
19     <ImageView
20         android:id="@+id/img1Id"
21         android:layout_width="100dp"
22         android:layout_height="90dp"
23         android:scaleType="centerCrop"
24         android:layout_margin="5dp"
25         android:layout_below="@id/btnId"/>
26
27     <ImageView
28         android:id="@+id/img2Id"
29         android:layout_width="100dp"
30         android:layout_height="90dp"
31         android:scaleType="centerCrop"
32         android:layout_margin="5dp"
33         android:layout_below="@id/btnId"
34         android:layout_toRightOf="@id/img1Id"/>
35
36       <ImageView
37         android:id="@+id/img3Id"
38         android:layout_width="100dp"
39         android:layout_height="90dp"
40         android:scaleType="centerCrop"
41         android:layout_margin="5dp"
42         android:layout_below="@id/img1Id"/>
43
44 </RelativeLayout>

activity_main.xml

至于服务的类都需要注册  这里就不写了

时间: 2024-12-21 14:04:41

IntentService----意图服务的相关文章

服务 IntentService 前台服务 定时后台服务

Activity public class MainActivity extends ListActivity {     private int intentNumber = 0;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         List<String> mData = new ArrayList

Picasso 源码解读

基本概念 使用说明 Picasso,一个强大的图片下载与缓存库,出自Square公司.基本使用如下: Picasso.with(context).load(R.drawable.landing_screen).into(imageView1); Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2); Picasso.with(context).load(new File(...)

Android推送服务(GCM)----GCM Architectural Overview翻译

GCMArchitectural Overview Google Cloud Messaging for Android (GCM)是一个能够帮助开发者从服务器端发送数据到运行在Android手机上的程序的服务.这个服务提供了一个简单,轻量级的机制使得服务器端可以告诉移动端的程序与服务器端建立直接的联系,来获取更新的程序或者用户的数据.C2DM服务可以处理所有的消息队列的问题并且可以把消息发送到目标机器上运行的目标程序. 简介 GCM的主要特点: 1  它允许第三方的程序服务端发送消息到他们的安

9.服务

服务Service 运行于后台的一个组件,用来运行适合运行在后台的代码,服务是没有前台界面,可以视为没有界面的activity 启动不了服务,在清单文件中写全包名 电话监听器 电话状态:空闲.响铃.接听 此代码在服务里运行,activity是很容易被杀死的 录音机 音频文件的编码和格式不是一一对应的 获取电话管理器,设置侦听 TelephonyManager tm =(TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen

android intentService

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 意图服务 普通的服务,默认运行在 主线程中. 这是带有异步处理的服务类. 异步处理的方法  在处理意图时候 方法

Android 服务类Service 的详细学习

上一篇说到了通知栏Notification,提起通知栏,不得让人想到Service以及BroadcastReceive,作为android的4大组建的2个重要成员,我们没少和它们打交道.它们可以在无形中使我们的软件和网络.数据库.系统等进行交互,之后通过UI(Notification就是一种展示方式)把结果展现在我们面前.可以说,他们是android生命体系里面的神经系统,通过反射条件让身体展现不同的状态.在整个系统中,广播接收器充当着是传输者和监听者的角色,它把系统的一点点变化都反馈上去,之后

Android 的线程(AsyncTask、HandlerThread、IntentService详解)和线程池

Android 的线程和线程池 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制的产生,并且线程的创建和销毁都有一定的开销. 当系统中存在大量的线程时,系统会通过时间片轮转的方式调度每个线程,因此线程不可能做到绝对的并发,除非线程数小于等于CUP的核心数,一般来说这是不可能的.如果在一个进程中频繁的创建和销毁线程,这显然不是高效的做法.正确的做法是采用线程池,一个线程池中会缓存一定数量的线程,通过线程池就可以避免因为频繁创建和销毁线程所带来的系统开销

Android 服务类Service 的具体学习

上一篇说到了通知栏Notification,提起通知栏,不得让人想到Service以及BroadcastReceive,作为android的4大组建的2个重要成员,我们没少和它们打交道.它们能够在无形中使我们的软件和网络.数据库.系统等进行交互,之后通过UI(Notification就是一种展示方式)把结果展如今我们面前.能够说,他们是android生命体系里面的神经系统,通过反射条件让身体展现不同的状态.在整个系统中,广播接收器充当着是传输者和监听者的角色,它把系统的一点点变化都反馈上去,之后

从网络获取数据(1)从newThread到AsyncTask在到IntentService

概述 安卓不允许在UI线程中发送网络请求,因此必须新启动一个线程. 如果我们在活动中new Thread,这样就会有问题,这个线程会随着活动的生命周期结束而结束,如果活动的命比这个线程短,活动死掉了,线程还没有进行完,然后也不幸 挂了,这样,获取数据的任务就相当于是失败了,这肯定是不可以的啊.所以我们需要使用一个后台进程,比如AsyncTask,但是这个AsyncTask也要能快速完成(最多几秒), 不过他也有的一个问题就是,如果用户选择屏幕,后台的那个AsyncTask没有执行完,又会新建一个