首页 > 代码库 > 客户端如何调用IBinder接口对象
客户端如何调用IBinder接口对象
代码:
public void funclick(View view){ Intent _intent = new Intent(MainActivity.this,MyService.class); bindService(_intent, conn, BIND_AUTO_CREATE); } private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName arg0) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { String mynameStr = ((MyBinder)service).helloWorld("bitch"); Log.e("mynameStr", mynameStr+"~"); } };
对于这样的一个service.有什么不同呢。服务端的代码可以参照我上篇博文,通过打印log发现。onStart或者onstartCommand并没有被调用哦。
到此,我们仍然不会满足,因为我们只是调用了MyBinder中的方法,并没有调用Myservice方法嘛。所以。我们要增加一个返回MyserVice的方法:
package com.example.mydownload; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; //实现接口中的方法 public class MyService extends Service { //接口对象 IBinder mybBinder = new MyBinder(); class MyBinder extends Binder{ <span style="color:#ff0000;">public MyService getMyService(){ return MyService.this; }</span> public String helloWorld(String name){ return name; } } @Override public void onCreate() { Log.e("log", "onCreate"); super.onCreate(); } Log.e("log", "hello,bitch!"); @Override public void onDestroy() { Log.e("log", "onDestroy"); super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.e("log", "onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent arg0) { return mybBinder; } }
然后修改客户端代码:
@Override public void onServiceConnected(ComponentName name, IBinder service) { ((MyBinder)service).getMyService().helloService(); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。