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. }  

 

关于广播和服务还有Intent更加详细的说明还有后续.


本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/622627,如需转载请自行联系原作者
相关文章
|
1月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
58 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
1月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
182 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
3月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
111 14
|
3月前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
|
3月前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
104 0
|
3月前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
|
4月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
482 4
|
Java Android开发
Android 中通过Intent传递类对象,通过实现Serializable和Parcelable接口两种方式传递对象
Android 中通过Intent传递类对象,通过实现Serializable和Parcelable接口两种方式传递对象
157 1

热门文章

最新文章