Android中Service和Activity相互通信示例代码

前言

在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,本文就给大家详细介绍了关于Android中Service和Activity相互通信的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

Activity向Service通信

第一种方式:通过MyBinder方式调用Service方法

MainActivity

public class MainActivity extends Activity {

 private MyConn conn;
 private MyBinder myBinder;//我定义的中间人对象

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 Intent intent = new Intent(this,BanZhengService.class);
 //连接服务
 conn = new MyConn();
 bindService(intent, conn, BIND_AUTO_CREATE);

 }

 //点击按钮调用服务里面办证的方法
 public void click(View v) {

 myBinder.callBanZheng(10000000);

 }

 //监视服务的状态
 private class MyConn implements ServiceConnection{

 //当服务连接成功调用
 @Override
 public void onServiceConnected(ComponentName name, IBinder service) {
  //获取中间人对象
  myBinder = (MyBinder) service;

 }

 //失去连接
 @Override
 public void onServiceDisconnected(ComponentName name) {

 }}
 @Override
 protected void onDestroy() {
 //当activity 销毁的时候 解绑服务
 unbindService(conn);
 super.onDestroy();
 }

}

BanZhengService

public class BanZhengService extends Service {

 //把我定义的中间人对象返回
 @Override
 public IBinder onBind(Intent intent) {
 return new MyBinder();
 }

 //办证的方法
 public void banZheng(int money){
 if (money>1000) {
  Toast.makeText(getApplicationContext(), "我是领导 把证给你办了", 1).show();
 }else {
  Toast.makeText(getApplicationContext(), "这点钱 还想办事....", 1).show();
 }
 }

 //[1]定义中间人对象(IBinder)

 public class MyBinder extends Binder{

 public void callBanZheng(int money){
  //调用办证的方法
  banZheng(money);
 }

 }}

第二种方式:通过接口Iservice调用Service方法

MainActivity

public class MainActivity extends Activity {

 private MyConn conn;
 private Iservice myBinder;//我定义的中间人对象

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 Intent intent = new Intent(this,DemoService.class);
 //连接服务
 conn = new MyConn();
 bindService(intent, conn, BIND_AUTO_CREATE);

 }

 //点击按钮调用服务里面办证的方法
 public void click(View v) {

 myBinder.callBanZheng(10000000);
// myBinder.callPlayMaJiang();
// myBinder.callXiSangNa();

 }

 //监视服务的状态
 private class MyConn implements ServiceConnection{

 //当服务连接成功调用
 @Override
 public void onServiceConnected(ComponentName name, IBinder service) {
  //获取中间人对象
  myBinder = (Iservice) service;

 }

 //失去连接
 @Override
 public void onServiceDisconnected(ComponentName name) {

 }

 }
 @Override
 protected void onDestroy() {
 //当activity 销毁的时候 解绑服务
 unbindService(conn);
 super.onDestroy();
 }

}

DemoService

public class DemoService extends Service {

 //把我定义的中间人对象返回
 @Override
 public IBinder onBind(Intent intent) {
 return new MyBinder();
 }

 //办证的方法
 public void banZheng(int money){
 if (money>1000) {
  Toast.makeText(getApplicationContext(), "我是领导 把证给你办了", 1).show();
 }else {
  Toast.makeText(getApplicationContext(), "这点钱 还想办事....", 1).show();
 }
 }

 //打麻将的方法
 public void playMaJiang(){
 System.out.println("陪领导打麻将");
 }

 //洗桑拿的方法
 public void 洗桑拿(){
 System.out.println("陪领导洗桑拿");

 }

 //[1]定义中间人对象(IBinder)

 private class MyBinder extends Binder implements Iservice{

 public void callBanZheng(int money){
  //调用办证的方法
  banZheng(money);
 }

 public void callPlayMaJiang(){
  //调用playMaJiang 的方法
  playMaJiang();

 }

 public void callXiSangNa(){
  //调用洗桑拿的方法
  洗桑拿();
 }}}

接口Iservice

public interface Iservice {

 //把领导想暴露的方法都定义在接口里
 public void callBanZheng(int money);
// public void callPlayMaJiang();

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Android实现从activity中停止Service的方法

    本文实例讲述了Android实现从activity中停止Service的方法.分享给大家供大家参考,具体如下: 1.在AndroidManifest.xml注册Service <service android:name=".service.SensorService" > <intent-filter> <action android:name="ITOP.MOBILE.SIMPLE.SERVICE.SENSORSERVICE"/>

  • Android Activity与Service通信(不同进程之间)详解

    在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activity中启动后台Service,通过Intent来启动,Intent中我们可以传递数据给Service,而当我们Service执行某些操作之后想要更新UI线程,我们应该怎么做呢?接下来我就介绍三种方式来实现Service与Activity之间的通信问题 Activity与Service通信的方式有三

  • Android Activity 与Service进行数据交互详解

    ①从设计的角度来讲: Android的Activity的设计与Web页面非常类似,从页面的跳转通过连接,以及从页面的定位通过URL,从每个页面的独立封装等方面都可以看出来,它主要负责与用户进行交互. Service则是在后台运行,默默地为用户提供功能,进行调度和统筹.如果一棵树的地上部分是Activity的话,它庞大的根须就是Service.Android的服务组件没有运行在独立的进程或线程中,它和其他的组件一样也在应用的主线程中运行,如果服务组件执行比较耗时的操作就会导致主线程阻塞或者假死,从

  • Android使用Messenger实现service与activity交互

    service与activity交互的方式有多种,这里说说使用Messenger来实现两者之间的交互. Service程序: public class MessengerService extends Service { final Messenger mMessenger = new Messenger(new IncomingHandler()); @Override public IBinder onBind(Intent intent) { return mMessenger.getBi

  • Android中Service与Activity之间通信的几种方式

    在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activity中启动后台Service,通过Intent来启动,Intent中我们可以传递数据给Service,而当我们Service执行某些操作之后想要更新UI线程,我们应该怎么做呢?接下来我就介绍两种方式来实现Service与Activity之间的通信问题 1.通过Binder对象 当Activity通

  • 浅谈Android Activity与Service的交互方式

    实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将广播中当前的下载进度解析出来并更新到界面上. 优缺点分析: 通过广播的方式实现Activity与Service的交互操作简单且容易实现,可以胜任简单级的应用.但缺点也十分明显,发送广播受到系统制约.系统会优先发送系统级广播,在某些特定的情况下,我们自定义的广播可能会延迟.同时在广播接收器中不能处理长耗时操作,否则系统会出现ANR即应用程序无响应

  • Android实现Activity、Service与Broadcaster三大组件之间互相调用的方法详解

    本文实例讲述了Android实现Activity.Service与Broadcaster三大组件之间互相调用的方法.分享给大家供大家参考,具体如下: 我们研究两个问题, 1.Service如何通过Broadcaster更改activity的一个TextView. (研究这个问题,考虑到Service从服务器端获得消息之后,将msg返回给activity) 2.Activity如何通过Binder调用Service的一个方法. (研究这个问题,考虑到与服务器端交互的动作,打包至Service,Ac

  • android使用service和activity获取屏幕尺寸的方法

    本文实例讲述了android使用service和activity获取屏幕尺寸的方法.分享给大家供大家参考.具体实现方法如下: 1. activity: DisplayMetrics dm = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(dm); sW = dm.widthPixels; sH = dm.heightPixels; 2. service: DisplayMetrics dm

  • Android中Service实时向Activity传递数据实例分析

    本文实例讲述了Android中Service实时向Activity传递数据的方法.分享给大家供大家参考.具体如下: 这里演示一个案例,需求如下: 在Service组件中创建一个线程,该线程用来生产数值,每隔1秒数值自动加1,然后把更新后的数值在界面上实时显示. 步骤如下: 1.新建一个android项目工程,取名为demo. 2.新建一个Service类,用来实时生产数值,供界面实时显示. package com.ljq.activity; import android.app.Service;

  • Android中Service和Activity相互通信示例代码

    前言 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,本文就给大家详细介绍了关于Android中Service和Activity相互通信的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. Activity向Service通信 第一种方式:通过MyBinder方式调用Service方法 MainActivity public class Ma

  • Android中js和原生交互的示例代码

    本文介绍了Android中js和原生交互的示例代码,分享给大家,具体如下: 加载webview的类 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); JavaScriptInterf

  • Android中TabLayout添加小红点的示例代码

    本文介绍了Android中TabLayout添加小红点的示例代码,分享给大家,具体如下 安卓原生的android.support.design.widget.TabLayout,配合ViewPager已经很好用了,但是有时我们会在内容更新时,在tab标题右上方加上一个红点等标记此tab内容有更新时,就需要给原生的TabLayout设置你定义的布局,用法和原生的一样,只是在代码中设置一下TabLayout的布局. 1.主布局文件 <?xml version="1.0" encodi

  • Android中贝塞尔曲线的绘制方法示例代码

    贝塞尔曲线,很多人可能不太了解,什么叫做贝塞尔曲线呢?这里先做一下简单介绍:贝塞尔曲线也可以叫做贝济埃曲线或者贝兹曲线,它由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋.一般的矢量图形软件常利用贝塞尔曲线来精确画出曲线. 上面的介绍中,"线段像可伸缩的皮筋"这句话非常关键,但也特别好理解.至于贝塞尔曲线的详细内容大家可以查阅相关资料.        Android提供的贝塞尔曲线绘制接口 在Android开发中,要实现贝塞尔曲线其实还是很简单的,因为Android已经给我们提

  • Android应用开发中Fragment与Activity间通信示例讲解

    首先,如果你想在android3.0及以下版本使用fragment,你必须引用android-support-v4.jar这个包 然后你写的activity不能再继承自Activity类了,而是要继承android.support.v4.app.FragmentActivity,一些其他的父类也有相应的变化. 由于在android的实现机制中fragment和activity会被分别实例化为两个不相干的对象,他们之间的联系由activity的一个成员对象fragmentmanager来维护.fr

  • Android 中利用 ksoap2 调用 WebService的示例代码

    去年刚刚工作的时候,第一个项目是要访问 WebService.由于没有接触过,查了很多资料,在别人代码的基础上稍微修改了一下,总算满足了自己的需求.最近整理电脑的时候,发现了这个 WebService 的访问类,怕哪一天需要的时候找不到了,干脆写在博客上吧,也给需要的人提供一个参考. 1.下载 ksoap2 的 jar 文件 下载地址:ksoap2-android-assembly-3.6.1-jar-with-dependencies.jar 下载完成后依赖到自己的项目中即可. 2.封装网络访

  • android中实现手机号码的校验的示例代码

    现在应用中都有对手机号码的校验,我以我自己的方式实现了一把,下面是效果图 1.核心代码很简单,如下: /** * 验证手机格式 */ public static boolean isMobileNO(String mobiles) { /* * 移动:134.135.136.137.138.139.150.151.157(TD).158.159.187.188 * 联通:130.131.132.152.155.156.185.186 电信:133.153.180.189.(1349卫通) * 总

  • 浅谈Android中Service的注册方式及使用

    Service通常总是称之为"后台服务",其中"后台"一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件: 1.并不依赖于用户可视的UI界面(当然,这一条其实也不是绝对的,如前台Service就是与Notification界面结合使用的): 2.具有较长时间的运行特性. 1.Service AndroidManifest.xml 声明 一般而言,从Service的启动方式上

随机推荐