android 服务的绑定调用
来源:互联网 发布:ubuntu文本输入 编辑:程序博客网 时间:2024/05/17 23:11
任务: 请求一个服务器,没五秒Ping一次,检查能否Ping通
服务类:
需要注意的的是:1 利用代理模式,向Activity抛出一个Binder的子类
2 记得在文件清单中声明服务类
<service android:name="com.example.servicetest.ReceiverService" />
3 请求服务器地址需要声明权限
<uses-permission android:name="android.permission.INTERNET" />
PingService
package com.example.servicebind;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;import android.support.annotation.Nullable;import android.util.Log;import java.net.HttpURLConnection;import java.net.URL;/** * Created by ls on 2016/9/18. * 绑定服务 利用的是代理类的模式 * 每隔五秒钟检查服务器能否拼通,如果ping不同,报错,两秒超时,报错 */public class PingService extends Service { private static final String TAG = "PingService"; //继承Binder返回当前服务的绑定(代理类 public class MyBinder extends Binder{ //在binder内可以调用服务中的方法 public boolean checkAccess() { return isCheck(); } } //返回远程服务的状态值 public boolean isCheck() { return access; } //远程服务可以访问的状态值 private boolean access = true; //定义一个标识当执行ondestroy() 时,线程中的whil()循环停止 private boolean run = true; //可以理解为经纪人代理(宋喆),服务绑定的模式理解其实就是代理模式 //例如,你要找王宝强拍戏(服务),先去找他的经纪人代理(宋喆),经纪人可以调用艺人的一些方法,反馈给你 MyBinder myBinder; @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate: "); myBinder = new MyBinder();//实例化代理类(先找到到宋喆 //服务一启动就做远程服务器的Ping new Thread(){ @Override public void run() { super.run(); try { String str = "http://192.168.56.1:8080/MyWeb/"; URL url = new URL(str); while (run) { try { HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET");//设置请求方式必须要大写 conn.setReadTimeout(2000); conn.connect(); //Opens a connection to the resource. access = true; Log.d(TAG, "run: access "+access); Thread.sleep(5000);//每隔五秒请求一次 } catch (Exception e) { e.printStackTrace(); access = false; Log.d(TAG, "run: access "+access); Thread.sleep(5000);//每隔五秒请求一次 } } } catch (Exception e) { e.printStackTrace(); access = false; } } }.start(); } @Nullable @Override public IBinder onBind(Intent intent) { //返回当前服务的绑定,这样就可以直接访问服务中的业务方法了,把代理人给你(Activity return myBinder; } @Override public boolean onUnbind(Intent intent) { Log.d(TAG, "onUnbind: "); //return true 表示解除绑定并停止服务 默认是return false即是super.onUnbind(intent) return super.onUnbind(intent); } @Override public void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy: "); run = false; }}2 声明一个应用继承Application
目的:当应用程序一启动,就启动服务,确保服务长期运行
<span style="color:#6600CC;">package com.example.servicebind;import android.app.Application;import android.content.Intent;/** * Created by ls on 2016/9/18. */public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Intent intent = new Intent(); intent.setClass(this, PingService.class); //应用程序一启动,就启动服务,这种方式可以确保服务长期运行 startService(intent); }}</span>3MainActivity
目的:绑定服务,通过代理类调用服务中的方法
<span style="color:#6600CC;">package com.example.servicebind;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.util.Log;import android.view.View;import android.widget.Toast;/** * Created by ls on 2016/9/18. * 绑定服务 */public class MainActivity extends Activity { private static final String TAG = "MainActivity"; //定义绑定的标识 private boolean bound = true; //经纪人来了 PingService.MyBinder myBinder; //服务的回调返回代理人(bindService是一个异步的过程 private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.d(TAG, "onServiceConnected: "); //IBinder 是一个定义接口 子类是Binder MyBinder又继承Binder myBinder = (PingService.MyBinder)service; } @Override public void onServiceDisconnected(ComponentName name) { Log.d(TAG, "onServiceDisconnected: only service be killed call"); } }; Intent intent = new Intent(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_servicebind); //窗体一启动,服务就启动/绑定 intent.setClass(this, PingService.class); // 窗体启动就绑定服务 // 使当前窗体可以调用服务中的业务,如果服务实例没有onCreate,那么就初始化服务并绑定 bindService(intent, conn, BIND_AUTO_CREATE); } //绑定服务 public void bind(View view) { //stopService(intent); //如果服务中没有onCreate就绑定服务 bindService(intent, conn, BIND_AUTO_CREATE); } public void call(View view) { /* // 绑定过程不能在调用时才执行(因为这是个异步过程) Intent intent=new Intent(); intent.setClass(this, PingService.class); bindService(intent, conn, BIND_AUTO_CREATE); */ Toast.makeText(MainActivity.this,myBinder.checkAccess()+ "", Toast.LENGTH_SHORT).show(); } //解绑 public void unbind(View veiw) { unbindService(conn); //声明已经解除绑定 bound = false; } //停止服务 public void stop(View view) { stopService(intent); } @Override protected void onDestroy() { super.onDestroy(); //如果已经解绑了,就跳过 if (bound) unbindService(conn); }}</span>
4 activity_main.xml
<span style="color:#3366FF;"><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:onClick="bind" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="绑定服务" /> <Button android:layout_marginTop="20dp" android:onClick="call" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="调用服务" /> <Button android:layout_marginTop="20dp" android:onClick="unbind" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="解除绑定" /> <Button android:layout_marginTop="20dp" android:onClick="stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止服务" /></LinearLayout></span>
0 0
- android 服务的绑定调用
- Android--绑定服务调用服务的方法
- android,aidl,绑定远程服务,调用远程服务的方法
- android之绑定服务调用服务的方法
- Android绑定方式开始服务&调用服务当中的方法
- Android启动服务和绑定服务的方法调用
- Android中服务里面方法的调用,开启,绑定
- 绑定服务&调用服务里面的方法
- 绑定服务:调用服务内部的方法
- andorid,绑定服务,调用服务的方法
- 绑定服务并调用服务的方法,解除绑定
- Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务
- 绑定的方式调用服务的方法
- 绑定服务调用方法的回顾
- Android---服务(Service)的绑定服务
- Android 绑定类型服务---创建绑定类型的服务
- Android 绑定类型服务---管理绑定类型服务的生命周期
- Android 绑定类型服务---创建绑定类型的服务
- maven与hibernate的配置
- [Android] Android项目Tab类型主界面Fragment+TabPageIndicator+ViewPager
- Unity4.X AssetBundle工具BundleManager
- 简单线段树模板
- 原生JS(JavaScript)
- android 服务的绑定调用
- 剑指offer - 面试题5:从尾到头打印链表
- Linux-系统管理-常用命令(下)
- Codeforces-401C-Team
- 2016/9/19
- Android Studio版本控制之SVN图文教程篇
- 完美世界编程题2
- bat批处理循环执行adb命令
- 如何让未知宽高的图片在已知宽高的父元素中垂直居中?