Android service的开启和绑定,以及调用service的方法

界面:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开启服务"
android:onClick="start"
/>

<Button android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="关闭服务"
android:onClick="close"
/>

<Button android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="绑定服务"
android:onClick="bind"
/>

<Button android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="取消绑定服务"
android:onClick="unbind"
/>

<Button android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="调用服务的方法function()"
android:onClick="callFunction"
/>
</LinearLayout>

Activity


package com.example.serviceTest;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;

public class MyActivity extends Activity {

private IService myBinder;
private ServiceConnection myConn = new MyConn();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

public void start(View view) {
startService(new Intent(this, TestService.class));
}

/**
* 多次调用停止服务,没有出现问题(不能多次解绑)
*/
public void close(View view) {
stopService(new Intent(this, TestService.class));
}

public void bind(View view) {
Intent intent = new Intent(this, TestService.class);
bindService(intent, myConn, BIND_AUTO_CREATE);
}

/**
* 多次解绑服务会报出错误
*/
public void unbind(View view) {
unbindService(myConn);
}

public void callFunction(View view) {
if (myBinder != null) {
myBinder.callFunction();
}
}

//绑定的时候,回调的一些方法
class MyConn implements ServiceConnection {

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("获取到binder");
myBinder = (IService) service;
}

@Override
public void onServiceDisconnected(ComponentName name) {
System.out.println("com.example.serviceTest.MyActivity.MyConn.onServiceDisconnected");
}
}
}

Service


package com.example.serviceTest;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;

/**
* Created by Heyiyong on 14-5-16.
*/
public class TestService extends Service {

public IBinder onBind(Intent intent) {
System.out.println("服务被绑定了!");
return new MyBinder();
}

//中间人(service的代理)
private class MyBinder extends Binder implements IService{
public void callFunction() {
function();
}
}

@Override
public void onCreate() {
System.out.println("com.example.serviceTest.TestService.onCreate");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("com.example.serviceTest.TestService.onStartCommand");
return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
System.out.println("com.example.serviceTest.TestService.onDestroy");
}

@Override
public boolean onUnbind(Intent intent) {
System.out.println("com.example.serviceTest.TestService.onUnbind");
return super.onUnbind(intent);
}

public void function() {
Toast.makeText(getApplicationContext(), "function()方法被调用了!", 1).show();
System.out.println("com.example.serviceTest.TestService.function");
}
}

Android service的开启和绑定,以及调用service的方法

时间: 2024-10-13 12:54:05

Android service的开启和绑定,以及调用service的方法的相关文章

[android] 代码注册广播接收者&amp;利用广播调用服务的方法

利用广播调用服务里面的方法,间接的方式调用服务内部的方法,与现实中差不多,请媒体曝光 主界面里面 在界面创建的时候开启一下服务普通的startService()方法 发送一条广播出去 获取Intent对象,通过new出来 调用Intent对象的setAction()方法,参数:一般就是包名 调用sendBroadcast(intebt)方法,发送广播,参数:Intent对象 服务里面 新建一个MyService类继承系统的Service类 添加一个自定义的服务的方法callServiceMeth

android之绑定服务调用服务的方法

public class MainActivity extends Activity { private music.MyBinder mm;//在activity里面得到服务ibinder对象的引用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public v

【黑马Android】(10)绑定的方式调用服务的方法/图片的各种操作/人脸识别

绑定的方式调用服务的方法 服务的生命周期: 一.采用start的方式开启服务 生命周期如下: onStart()过时了 开启服务:onCreate()--> onStartCommand() ---> onDestory(); 如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和 onStartCommand(); 服务停止的时候onDestory(). 服务只会被停止一次 二.服务还有一种开启方式,绑定的方式开启服务. onCreate()--->on

Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法

1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 :                     bindService(intent, new MyConn(), BIND_AUTO_CREATE): 参数intent:意图对象,服务对应的意图对象  new  Intent(this,Service.class) 参数ServiceConnection (接口,自定义其接口实现内部类MyConn() ):通讯

Android学习之远程绑定调用service

http://blog.csdn.net/q1234456gggg_jkjg/article/details/8479070 远程绑定调用service主要是用来不同进程的信息共享.就比如服务器和客户端,在服务器端设置好一个service提供方法或信息,然后客户端可以直 接调用服务器端service提供方法或信息.这里有个前提是客户端必须有和服务器端一份一样的AIDL,然后服务器端在客户端使用的系统上有注册过(也 就是安装运行过一次),之后客户端就可以远程绑定调用服务器端的service了. 具

AndroidStudio通过AIDL开启、绑定远程Service

前言 关于服务的启动方式(startService().stopService().bindService().unbindService()),我这里就不多说了,可以参考这篇博文. 示例原理图 本文以一个简单的案例,记录一下怎么使用AIDL结合服务实现进程间的通信: 首先,创建两个项目,一个项目(RemoteService)作为远程服务提供端,另一个(RemoteServiceTest)作为调用远程服务的客户端.然后,当客户端绑定远程服务后,可以通过AIDL接口调用远程服务中的方法,原理过程如

Android高级编程笔记(八)深入分析Service启动、绑定过程

Service是Android中一个重要的组件,它没有用户界面,可以运行在后太做一些耗时操作.Service可以被其他组件启动,甚至当用户切换到其他应用时,它仍然可以在后台保存运行.Service 是Android四大组件中与Activity最相似的组件,都代表可执行的程序,区别在于:Service一直运行在后台,没有界面,一旦Service被启动,即完全具有自己的生命周期. 一.创建一个Service 在创建Service时,步骤与Activity很像: 1.继承Service,创建Servi

Android -- Service的开启关闭与生命周期

Service是Android 系统中的四大组件之一,是在一段不定的时间运行在后台,不和用户交互应用组件. service可以在很多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化等等. 生命周期                                                                                  context.startService() 启动流程: con

Android -- 利用Broadcast开启Service

Broadcast和Service都是Android四大组建之一的. 这里的广播是动态的,自己注册的一个广播. 这种最典型的用法就是利用开机广播,然后再起自己的服务,也就是在Android手机中做到开启启动. Service与Broadcast                                                                 public class MyService extends Service { private MyReceiver rec