绑定方式开始服务&调用服务的方法
1、编写activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <Button
android:onClick="start"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="开启服务"
/> <Button
android:onClick="stop"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="停止服务"
/>
<Button
android:onClick="bind"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="绑定服务"
/> <Button
android:onClick="unbind"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="解除绑定服务"
/> <Button
android:onClick="change"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="调用方法,切换至下一首歌曲"
/> </LinearLayout>
2、编写MainActivity.java
package com.hyzhou.testservice; import com.hyzhou.testservice.TestServer.MyBinder; import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection; public class MainActivity extends Activity {
//步骤4:在activity里面得到服务IBinder对象的引用
private TestServer.MyBinder myBinder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void start(View view)
{
Intent intent=new Intent(this,TestServer.class);
startService(intent); }
public void stop(View view)
{
Intent intent=new Intent(this,TestServer.class);
stopService(intent);
} public void bind(View view)
{
Intent intent=new Intent(this,TestServer.class);
/**
* intent 激活服务意图
* conn 代理人中间人对象,用来跟服务建立联系不能为空
* BIND_AUTO_CREATE 在绑定服务的时候 如果服务不存在就自动创建
*/
//步骤1:采用绑定的方式开启服务
bindService(intent, new MyConn(), BIND_AUTO_CREATE); }
public void unbind(View view)
{
Intent intent=new Intent(this,TestServer.class); } public void change(View view)
{
/**
* 由于系统框架在创建服务的时候会创建与之对应的上下文
* 下面的代码是直接new对象
* TestService service=new TestService();
* service.changeSing("月亮之上");
*/
//步骤5:利用IBinder对象间接调用服务里面的方法
myBinder.callchangeSing("月亮至上"); } private class MyConn implements ServiceConnection{ //在服务被成功绑定的时候调用的方法
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
System.out.println("testserver代理人返回回来了");
//步骤3:服务返回的IBinder对象会被传递给MyConn的回调方法
myBinder=(MyBinder)service; } //在服务失去绑定的时候调用的方法 只有程序异常终止才会调用该方法
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub }
}
}
3、编写TestServer服务
package com.hyzhou.testservice;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast; /**
*
*/ /**
* @author hyzhou
*
* 2013-12-10
*/
public class TestServer extends Service { @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub System.out.println("服务被成功的绑定了------...");
//步骤2:服务在成功绑定的时候会调用onBind方法,返回一个IBinder对象
return new MyBinder();
}
public class MyBinder extends Binder{
@SuppressWarnings("unused")
public void callchangeSing(String name)
{
changeSing(name);
}
} @Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("开启服务------...");
} @Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("销毁服务------...");
} public void changeSing(String name)
{
Toast.makeText(getApplicationContext(), "切换至当前的音乐"+name, 0).show();
} }
绑定方式开始服务&调用服务的方法的更多相关文章
- Android(java)学习笔记229:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)
1.接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2.利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.jav ...
- Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法
1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 : bindServ ...
- Android(java)学习笔记172:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)
1. 接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2. 利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.j ...
- Android(java)学习笔记171:服务(service)之绑定服务调用服务里面的方法
1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 : bindServ ...
- [android] 绑定方式开启服务&调用服务的方法
需求:后台开启一个唱歌服务,这个服务里面有个方法切换歌曲 新建一个SingService继承系统Service 重写onCreate()和onDestory()方法 填一个自定义的方法changeSi ...
- Android--绑定服务调用服务的方法
Service依照其启动的方式,可分为两种: 1.Started Started的Service.通过在Application里用startService(Intent intent)方法来启动.这样 ...
- SpringCloud实战-Feign声明式服务调用
在前面的文章中可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率 ...
- SpringCloud-Feign声明式服务调用
在前面的文章中可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率 ...
- Dubbo——服务调用过程
文章目录 引言 服务的交互 服务降级 集群容错 服务调用 服务端接收请求 总结 引言 经过之前文章的铺垫,现在可以来分析服务的交互调用过程了. 服务的交互 服务降级 从名字上看我们不难理解MockCl ...
随机推荐
- combobox的值从主页面传递到子页面
1.主页面传递参数 url: '@Url.Action("WaterLoad")' + '?year=' + year + '&fanwei=' + fanwei, 2.控 ...
- Windows安装Tomcat失败:Failed installing tomcat7 service
今天在Win7下面安装tomcat(解压版),但是安装的时候老是弹出:Failed installing tomcat6 service.猜想是Win7安全权限管理的原因.网上搜了一下果然是这样. 解 ...
- Linux source命令
Linux source命令 Linux source命令: 通常用法:source filepath 或 . filepath 功能:使当前shell读入路径为filepath的shell文件并 ...
- Mayi_Maven安装与配置Myeclipse、Idea
一.需要准备的东西 1. JDK 2. Eclipse 3. Maven程序包 二.下载与安装 1. 前往https://maven.apache.org/download.cgi下载最新版的Mave ...
- SAP SD 顾问面试问题 consultant interview questionnaire
以下是我个人目前面试团队 SD顾问问题的小结,希望对大家有所帮助, 也可能有回答错误的地方,希望同行不吝赐教. 也希望各位顾问们讲你们遇到的一些面试问题做个跟贴,方便大家共同进步,谢谢. 面试问题 ...
- 原创:如何实现在Excel通过循环语句设置指定行的格式
原创:如何实现在Excel通过循环语句设置指定行的格式 一.需求: 想让excel的某些行(比如3的倍数的行)字体变成5号字 如何整: 二.实现: Sub code() To Range(" ...
- Spring JDBC PreparedStatementSetter接口示例
org.springframework.jdbc.core.PreparedStatementSetter接口充当JdbcTemplate类使用的一般回调接口.该接口在JdbcTemplate类提供的 ...
- 如何在集群中获得处理本次请求的web容器的端口号?
系统四台机器,每台机器部署四个Tomcat Web容器.现需要根据端口号随机切换到映射的数据源,若一台机器一个Tomcat则用IP识别,可现在一台机器四个Tomcat,因此还需要获得Web容器的端口号 ...
- shell 下执行mysql 命令
From: http://blog.csdn.net/beginning1126/article/details/8590014 方案1 mysql -uuser -ppasswd -e 优点:语句简 ...
- HTTP Analyzer——WEB调试代理
HTTP Analyzer 是一个实时的web调试代理,如果你对Fiddler不陌生的话,HTTP Analyzer 就是和Fiddler具备一样功能的调试代理. 推荐这个软件而不推荐Fiddler的 ...