BindService总结
一、整体工程图
二、activity_bind.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"> <Button android:text="useService"
android:id="@+id/buttonUseService"
android:layout_width="fill_parent"
android:layout_height="wrap_content"></Button>
</LinearLayout>
三、BindActivity.java
package com.jltxgcy.bindservice; import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast; import com.jltxgcy.bindservice.LocalService.LocalBinder; public class BindActivity extends Activity { LocalService mService;
boolean mBound = false; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bind);
findViewById(R.id.buttonUseService).setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
if (mBound) {
// Call a method from the LocalService.
// However, if this call were something that might hang, then this request should
// occur in a separate thread to avoid slowing down the activity performance.
int num = mService.getRandomNumber();
Toast.makeText(BindActivity.this, "number: " + num, Toast.LENGTH_SHORT).show();
} }
});
} @Override
protected void onStart() {
super.onStart();
// Bind to LocalService
Intent intent = new Intent(this, LocalService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
} @Override
protected void onStop() {
super.onStop();
// Unbind from the service
if (mBound) {
unbindService(mConnection);
mBound = false;
}
} /** Defines callbacks for service binding, passed to bindService() */
private ServiceConnection mConnection = new ServiceConnection() { @Override
public void onServiceConnected(ComponentName className,
IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
mBound = true;
Log.d("jltxgcy", "onServiceConnected");
} //Called when the connection with the service disconnects unexpectedly
@Override
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
Log.d("jltxgcy", "onServiceDisconnected");
}
};
}
四、LocalService.java
package com.jltxgcy.bindservice; import java.util.Random; import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log; public class LocalService extends Service {
public static final String TAG="jltxgcy";
// Binder given to clients
private final IBinder mBinder = new LocalBinder();
// Random number generator
private final Random mGenerator = new Random(); @Override
public void onCreate() {
Log.d(TAG, "onCreate");
super.onCreate();
} /**
* Class used for the client Binder. Because we know this service always
* runs in the same process as its clients, we don't need to deal with IPC.
*/
public class LocalBinder extends Binder {
LocalService getService() {
// Return this instance of LocalService so clients can call public methods
return LocalService.this;
}
} @Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "onBind");
return mBinder;
} /** method for clients */
public int getRandomNumber() {
return mGenerator.nextInt(100);
} @Override
public boolean onUnbind(Intent intent) {
Log.d(TAG, "onUnbind");
return super.onUnbind(intent);
} @Override
public void onDestroy() {
Log.d(TAG, "onDestroy"); }
}
五、详解
程序开始,绑定Service,结果显示如下:
说明了调用的先后顺序。onBind方法得到了IBinder对象,onServiceConnected方法将IBinder对象向下转型为LocalBinder对象,通过调用getService取得Service实例, 这样就可以在BindActivity中使用Service的方法。
按Back键退出,调用
BindService总结的更多相关文章
- Android之startService()和bindService()区别
1. 生命周期: startService()方式启动,Service是通过接受Intent并且会经历onCreate()和onStart().当用户在发出意图使之销毁时会经历onDestroy(), ...
- 实验7 BindService模拟通信
实验报告 课程名称 基于Android平台移动互联网开发 实验日期 2016.4.16 实验项目名称 BindService模拟通信 实验地点 S30010 实验类型 □验证型 √设计型 ...
- bindService初步了解
bindService的使用: 当需要调Service里面的方法时,可以用bindService() 首先定义一个类继承于Service,然后配置Manifest.xml文件 public class ...
- [Android Pro] Service (startservice , bindservice , unbindservice, stopService)
1: startService -------stopService (this will call onDestroy) 2: bindService -------unbindService ...
- [转]安卓开发startservice 和bindservice详解
原文 作者:aikongmeng 来源:安卓中文网 博主暗表:搜到此文,终于为我解惑,bindService并不会真正启动service,不会调用onStartCommand!还需要再bind之前st ...
- 深入理解Android的startservice和bindservice
一.首先,让我们确认下什么是service? service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互.它必须由用户或者其他程序显式的启动.它的优先级比 ...
- Android bindservice使用
package com.example.myact10; import com.example.myact10.MyService.MyBinder; import android.support.v ...
- startService()和bindService()区别
1. 生命周期:startService()方式启动,Service是通过接受Intent并且会经历onCreate()和onStart().当用户在发出意图使之销毁时会经历onDestroy(),而 ...
- 【Android 界面效果34】Android里Service的bindService()和startService()混合使用深入分析
.先讲讲怎么使用bindService()绑定服务 应用组件(客户端)可以调用bindService()绑定到一个service.Android系统之后调用service的onBind()方法,它返回 ...
- bindService和startService的区别
区别: startService,关闭服务退出activity,service仍然处于后台运行 bindService,关闭服务退出activity直接stopService,停止服务 bindSer ...
随机推荐
- DHTML【8】--CSS
在讲HTML时说过,有个Style标签是在CSS里用的,是的,在HTML中添加CSS样式必须要用到Style,在标签里单独定义标签属性时用的是Style属性.上一节我们也说过,先不用管那个Style标 ...
- day54
今天复习时间15个小时 那都做了什么呢 数学2000试卷 阅读2篇整理 翻译2个视频 政治背诵加视频 数学综合5个证明 作文两篇 c语言结构体以及简单总结 博客园日记 数据结构 好了 感觉也没有做什么 ...
- phpcms:五、网站首页(index.html)
1.经典案例:图文列表:{pc:content action="position" posid="2" order="listorder DESC& ...
- 【转】YUV格式&像素
一幅彩色图像的基本要素是什么? 说白了,一幅图像包括的基本东西就是二进制数据,其容量大小实质即为二进制数据的多少.一幅1920x1080像素的YUV422的图像,大小是1920X1080X2=4147 ...
- servlet下载,解决文件名中有中文下载路径出现乱码不能正常下载问题
方法很多种,我只试用了两种. 主页面JSP中引入下载功能所需的js文件.引入的时候设置编码格式例如 <script type="text/javascript" charse ...
- laravel3中文文档是迈入laravel4的捷径
http://v3.golaravel.com/docs/ 目录 Laravel概览 更新日志 安装与设置 系统需求 安装 服务器设置 基本设置 环境 友好的链接(URL) 路由 基础 通配符(Wil ...
- 用CSS3写的钟表
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- ajax请求webservice时抛出终止线程的异常
请求webservice中以下接口,会抛出异常 {"Message":"正在中止线程.","StackTrace":" 在 Sys ...
- AngularJs练习Demo9 Http
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...
- ORACLE触发器概述之【语句触发器】【weber出品】
一.触发器概述 与表,视图,模式,或者数据库相关的PL/SQL过程,当触发条件被触发时,自动执行 分类: 1.语句触发器 2.行触发器 二.语句触发器 1. 什么是语句触发器 语句触发器,是指当执行D ...