`

Android中Intent,service,broadcast应用浅析

 
阅读更多

 Android中Intent,service,broadcast应用浅析(一)

 典型的Android应用程序由两部分构成,一个是在前台运行的Activity和View,一个就是在后台运行的Intent 和Service对象,还有一种是是广播接收器,BroadCastReceiver,我们通常启动一个service(服务)对象或者发送一个广播,都是由Intent 来启动的.
 
首先来看下怎么用Intent来启动一个服务:
写了一个小例子,在主页面上有两个按钮,一个点击是启动服务,一个点击是取消服务,看了界面,再看一下界面,在看一下源代码的截图.

 

 

关于服务需要说明的是:服务中只有onCreate,onStart,和onStop方法,当第一次启动服务的时候调用的是onCreate,onStart方法,停止服务时调用onStop方法,完了之后再启动服务就只需要调用onStart方法了.

 

  1. public class Activity01 extends Activity {  
  2.     @Override  
  3.     public void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         setContentView(R.layout.main);  
  6.         Button startService = (Button) findViewById(R.id.startBtn);  
  7.         startService.setOnClickListener(new OnClickListener() {  
  8.             @Override  
  9.             public void onClick(View v) {  
  10.                 startService(new Intent(Activity01.this,  
  11.                         BackgroundService.class));  
  12.             }  
  13.         });  
  14.         Button stopService = (Button) findViewById(R.id.stopBtn);  
  15.         stopService.setOnClickListener(new OnClickListener() {  
  16.             @Override  
  17.             public void onClick(View v) {  
  18.                 stopService(new Intent(Activity01.this, BackgroundService.class));  
  19.             }  
  20.         });  
  21.     }  

 

我现在写的这个小服务的功能是满足时间条件后刷新状态栏,具体的说,就是启动服务之后开始计算时间,当时间过了一定的时间点之后就刷新状态栏,因为之前要在程序中做这一块,就写了这样的一个小例子.
 
先看代码中onCreate方法,声明了一个通知栏管理的对象,然后用了一个handler,这个handler收到message之后静态变量seconds加一,然后更新状态栏。

 

  1. @Override  
  2.     public void onCreate() {  
  3.         super.onCreate();  
  4.         notificationMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);  
  5.         handler = new Handler() {  
  6.             public void handleMessage(Message msg) {  
  7.                 switch (msg.what) {  
  8.                 case 1:  
  9.                     seconds++;  
  10.                     updateNotification(seconds);  
  11.                     break;  
  12.                 }  
  13.                 super.handleMessage(msg);  
  14.             }  
  15.         };  
  16.         timer = new Timer(false);  
  17.     }  

 

但是handler是怎样收到message的呢?这是我们在onStart中创建了一个timer的对象,可以看代码,onStart方法中向通知栏发送一个消息,说明已经启动服务,然后调用run方法,每个一秒钟向handler发送一个消息.handler接收到消息后执行的代码已经在onCreate中说过

 

  1. @Override  
  2. public void onStart(Intent intent, int startId) {  
  3.     super.onStart(intent, startId);  
  4.     displayNotificationMessage("starting Background Service");  
  5.     timer.schedule(new TimerTask() {  
  6.         @Override  
  7.         public void run() {  
  8.             Message message = new Message();  
  9.             message.what = 1;  
  10.             handler.sendMessage(message);  
  11.         }  
  12.     }, 1000, 1000);  

 

当我去停止服务的时候,向通知栏中发动一个消息,说明停止服务,然后重新置标记服务已经开始了多长时间的变量为0,同时用timer.cancel()方法来停止timer的运行。
 

 

  1. @Override  
  2.     public void onDestroy() {  
  3.         super.onDestroy();  
  4.         displayNotificationMessage("stopping Background Service");  
  5.         seconds = 0;  
  6.         timer.cancel();  
  7.  
  8.     } 

 

向状态栏发送信息的方法,需要说明的就是这个PendingIntent,刚开始的时候很不理解这个东西,后来终于搞明白了,Intent是发送出去一个任务,我们向状态栏中发送一个消息,状态栏下拉点击的时候我们要让他有什么样的反应,就是需要用PendingIntent来定义,相当于PendingIntent定义的是这个操作被触发的时候需要的指示操作,通俗理解,Intent相当于你跟别人发送一个直接命令,说让别人直接做什么.PendingIntent相当于你给别人一个命令,命令中告诉他当有紧急事件发生的时候做什么,总之有点难理解了.

 

  1. private void displayNotificationMessage(String message) {  
  2.     Notification notification = new Notification(R.drawable.icon, message,  
  3.             System.currentTimeMillis());  
  4.     PendingIntent contentIntent = PendingIntent.getActivity(this, 0,  
  5.             new Intent(this, Activity01.class), 0);  
  6.       
  7.     notification.setLatestEventInfo(this, "Background Service", message,  
  8.             contentIntent);  
  9.     notificationMgr.notify(R.id.app_notification_id, notification);  
  10. }  

 

本文出自 “HDDevTeam” 博客,http://hddev.blog.51cto.com/3365350/622627

分享到:
评论

相关推荐

    Android Intent Service BroadCast AndroidStudio

    本项目将Android中的Intent总结了一遍。主要有四个项目,Intent_Intent项目是简单的Intent跳转(setActivityResult);Intent_broadcast主要是静态广播的注册;Intent_broadcastdynamic主要介绍动态广播的注册;...

    Android中关于Broadcast、Intent 的应用

    在Android系统中,Broadcast(广播)和Intent是两个至关重要的组件,它们构成了应用程序间通信的基础。Broadcast用于在应用程序之间传递消息,而Intent则扮演着触发操作的“信使”角色。理解并熟练运用这两个概念,...

    android intent service 实例

    在Android应用开发中,Intent Service是一个非常重要的组件,它用于执行长时间运行的后台任务,而不会阻塞用户界面。Intent Service的设计目标是处理一次性或连续的请求,一旦所有任务完成,服务会自动停止,无需...

    Android的Intent实验

    在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)以及内容提供者(Content Provider)之间的交互...

    Android通过Intent跳转地图应用(百度地图、高德地图)

    本篇文章将深入讲解如何使用Intent在Android应用中跳转到这些地图应用,并在用户未安装相应地图应用时提供备选方案,如打开网页版地图。 首先,我们需要了解Intent的基本结构。Intent通常由两部分组成:Action和...

    android.intent.action.TIME_TICK

    在Android系统中,广播接收器(Broadcast Receiver)是一种重要的组件,它允许应用程序对全局系统事件做出响应。在给定的标题"android.intent.action.TIME_TICK"中,涉及的是一个特定的系统广播,当系统时间每分钟...

    Android利用Intent启动和关闭Activity

    在Android应用程序开发中,Intent是连接各个组件(如Activity、Service等)的关键桥梁,主要用于启动和关闭Activity。Intent不仅能够启动一个新的Activity,还能在Activity之间传递数据,实现应用内部或应用间的交互...

    Android中intent的使用

    在Android应用开发中,Intent是连接应用程序组件之间通信的关键机制,它用于启动其他组件或传递数据。本篇文章将深入探讨Intent的基本概念、类型、构造方法以及如何在Android中有效地使用Intent。 Intent是一种意图...

    android中intent使用示例

    总结,Intent是Android系统中连接各个组件的桥梁,理解并熟练使用Intent对于开发Android应用至关重要。在实际项目中,Intent不仅可以用于启动Activity和Service,还可以用于启动BroadcastReceiver,实现各种组件间的...

    android Intent的用法

    在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务(Service)或者广播接收器(Broadcast Receiver),并且可以传递数据和执行动作。本篇文章将详细解析Intent的用法。 ...

    android service 通过broadcast通知activity

    在Android应用开发中,Service是实现后台运行任务的关键组件,它可以独立于用户界面持续执行操作。本主题将深入探讨如何使用Service以及BroadcastReceiver来实现特定的功能:当Service检测到某个函数的状态变化时,...

    Android-Intent-数据存取-ContentProvider.doc

    Android Intent 是 Android 组件之间的信使,负责在 Android 三大核心组件(Activity、Service、Broadcast Receiver)之间传递信息。Intent 是一个将要执行的动作的抽象描述,通常作为参数来使用,由 Intent 来协助...

    android中Intent传递对象的两种方法(Serializable,Parcelable)

    在Android开发中,Intent是应用程序之间以及应用程序内部组件之间通信的重要工具。它可以用来启动新的Activity、Service,或者在组件间传递数据。当我们需要在Intent中传递复杂对象时,有两种主要的方法:...

    Android 多个service的action 相同冲突 验证demo

    在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互界面不直接关联。在某些情况下,我们可能需要启动多个Service来执行不同的任务,但问题在于,如果这些Service...

    Android中使用Intent获取其他应用程序信息的方法介绍.pdf

    本文主要探讨了如何利用Intent在Android系统中获取并操作其他应用程序的信息。以下是对这些方法的详细解释: 1. 卸载应用程序 使用Intent ACTION_DELETE可以实现卸载已安装的应用程序。首先,构建一个Uri对象,其...

    Service和Activity通过Broadcast共享数据

    在Service中,当需要发送数据到Activity时,创建Intent并指定广播动作: ```java Intent intent = new Intent("com.example.SERVICE_TO_ACTIVITY_BROADCAST"); // 添加要传递的数据 intent.putExtra("key", ...

    Android应用源码之broadcast_broadcast.zip

    本压缩包“Android应用源码之broadcast_broadcast.zip”可能包含了关于如何在实际应用中使用BroadcastReceiver的示例代码。 广播分为两种类型:有序广播(Ordered Broadcast)和无序广播(Unordered Broadcast)。...

    Android应用核心Intent

    在Android开发中,Intent是一个至关重要的概念,它充当着应用程序组件间通信的桥梁。Intent不仅用于启动活动(Activity)或服务(Service),还能传递数据、启动广播接收器(BroadcastReceiver)。下面将深入探讨...

    Android中Intent和ProgressBar的结合使用

    在TargetActivity或Service中,你可以使用AsyncTask、Thread或Handler来执行后台任务,并通过回调或者BroadcastReceiver的方式更新主线程中的ProgressBar。 例如,使用AsyncTask: ```java private class MyTask ...

Global site tag (gtag.js) - Google Analytics