Android(java)学习笔记172:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)
1. 接口
接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法
2. 利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下:
(1)这里MainActivity.java:
- package com.itheima.bind;
- 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 MainActivity extends Activity {
- IService myBinder;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
- protected void onDestory(Bundle savedInstanceState) {
- super.onDestory();
- -----;//解绑服务
- }
- /**
- * 绑定服务,获取服务里面的小蜜,间接的调用服务里面的方法。
- * @param view
- */
- public void bind(View view){
- Intent intent = new Intent(this,DemoService.class);
- //intent 意图
- //conn 服务的通讯频道
- //1 服务如果在绑定的时候不存在,会自动创建
- System.out.println("1.采用bind的方式开启服务");
- bindService(intent, new MyConn(), BIND_AUTO_CREATE);
- }
- /**
- * 解绑服务
- * @param view
- */
- public void unbind(View view){
- System.out.println("解绑服务");
- if(myBinder != null) {
- unbindService(new MyConn());
- myBinder = null;
- }
- }
- /**
- * 服务连接成功的通讯频道
- *
- */
- private class MyConn implements ServiceConnection{
- //当服务被成功连接的时候调用的方法
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- System.out.println("3. 得到了服务的一个连接,通讯频道,获取到服务内部的小蜜");
- myBinder = (IService) service;
- System.out.println("4.把ibinder强制类型转化成小蜜 MyBinder");
- }
- //当服务失去连接的时候调用的方法
- @Override
- public void onServiceDisconnected(ComponentName name) {
- }
- }
- /**
- * 调用服务里面的方法。
- * @param view
- */
- public void call(View view){
- System.out.println("5.利用mybinder间接的调用服务的方法");
- myBinder.callMethodInService(600);
- }
- }
(2)其中的DemoService.java:
- package com.itheima.bind;
- import android.app.Service;
- import android.content.Intent;
- import android.os.Binder;
- import android.os.IBinder;
- import android.widget.Toast;
- public class DemoService extends Service {
- /**
- * 在服务被绑定的时候调用的方法
- *
- * IBinder 服务内部的小蜜
- */
- @Override
- public IBinder onBind(Intent intent) {
- System.out.println("2. 服务如果成功绑定会执行onbind,返回服务内部的小蜜 mybinder");
- return new MyBinder();
- }
- /**
- * 服务内部的小蜜,可以调用服务的方法
- *
- */
- private class MyBinder extends Binder implements IService{
- /**
- * 调用服务的方法。
- * @param money 钱
- */
- public void callMethodInService(int money){
- if(money>500){
- methodInService();
- }else{
- Toast.makeText(DemoService.this, "这点钱还想办事呀?", 0).show();
- }
- }
- public void 打麻将(){
- Toast.makeText(DemoService.this, "一起打麻将", 0).show();
- }
- public void 洗桑拿(){
- Toast.makeText(DemoService.this, "一起洗桑拿", 0).show();
- }
- }
- /**
- * 服务里面的方法
- */
- public void methodInService(){
- Toast.makeText(this, "哈哈,我是服务的方法,被你调用了。", 0).show();
- }
- @Override
- public void onCreate() {
- System.out.println("服务被创建了");
- super.onCreate();
- }
- @Override
- public void onDestroy() {
- System.out.println("服务被销毁了。");
- super.onDestroy();
- }
- }
(3)接口IService.java:
- package com.itheima.bind;
- /**
- * 定义的接口,暴露一个给钱办事的方法。
- */
- public interface IService {
- public void callMethodInService(int money);
- }
其他文件代码不变
(4)工程一览图:
Android(java)学习笔记172:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)的更多相关文章
- Android(java)学习笔记229:服务(service)之绑定服务调用服务里面的方法 (采用接口隐藏代码内部实现)
1.接口 接口可以隐藏代码内部的细节,只暴露程序员想暴露的方法 2.利用上面的思想优化之前的案例:服务(service)之绑定服务调用服务里面的方法,如下: (1)这里MainActivity.jav ...
- Android:日常学习笔记(7)———探究UI开发(1)
Android:日常学习笔记(7)———探究UI开发(1) 常用控件的使用方法 TextView 说明:TextView是安卓中最为简单的一个控件,常用来在界面上显示一段文本信息. 代码: <T ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- 20155234 2016-2017-2第十周《Java学习笔记》学习总结
20155234第十周<Java学习笔记>学习总结 教材学习内容总结 网络编程 在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定 ...
- Android:日常学习笔记(2)——分析第一个Android应用程序
Android:日常学习笔记(2)——分析第一个Android应用程序 Android项目结构 整体目录结构分析 说明: 除了APP目录外,其他目录都是自动生成的.APP目录的下的内容才是我们的工作重 ...
- java学习笔记之基础篇
java选择语句之switch //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...
- Android Studio 学习笔记(一)环境搭建、文件目录等相关说明
Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...
- Java web与web gis学习笔记(二)——百度地图API调用
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
随机推荐
- 【Codeforces 582A】 GCD Table
[题目链接] 点击打开链接 [算法] G中最大的数一定也是a中最大的数. G中次大的数一定也是a中次大的数. 第三.第四可能是由最大和次大的gcd产生的 那么就不难想到下面的算法: ...
- 【JSOI 2007】建筑抢修
[题目链接] 点击打开链接 [算法] 将T2从小到大排序,当决策当前建筑修或不修时,若当前花费时间 + T1 <= T2,则修,否则判断T1是否小于之前修的 T1最大的建筑,若小于,则修,我们可 ...
- python 高性能web框架 gunicorn+gevent
参考链接: http://rfyiamcool.blog.51cto.com/1030776/1276364/ http://www.cnblogs.com/nanrou/p/7026789.html ...
- vue随笔2
vue2.0中移除.sync修饰符 .sync可是实现props的双向数据绑定,但是会破坏[单向数据流]的假设.这样的话在改变子组件时,父组件同时也改变,你完全不知道它是何时悄悄地改变了父组件的状态. ...
- 1. jsp中<base target='' />标签用法
用于页面跳转后,页面最后跳转到哪个iframe.例子如下: index.jsp :首页 <head> <base href="<%=basePath %>&qu ...
- Start Developing Mac Apps -- Mac App Store Mac 应用商店
Mac App Store The information you’ve read so far focused on how to create an app in Xcode. However ...
- FTP两种工作模式:主动模式(Active FTP)和被动模式
在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令.服务器接收到命令后,会用其本地的FTP数据端口 ...
- iOS Button选中与取消
/** * 是否点击 */ @property (nonatomic ,assign) BOOL selected; /** * button 点击事件选中取消选中 */ - (void)handl ...
- ObjectARX学习笔记
http://blog.csdn.net/jangdong/article/category/1642265/3 http://blog.csdn.net/u011331383/article/cat ...
- bzoj 3926: [Zjoi2015]诸神眷顾的幻想乡【SAM】
有一个显然的性质就是每个串一定在某个叶子为根的树中是一条直的链 然后因为SAM里是不会有相同状态的,所以以每个叶子为根dfs一遍,并且动态构造SAM(这里的节点u的last指向父亲),最后统计答案就是 ...