、新建mybinder对象: private MyBinder myBinder = new MyBinder(); class MyBinder extends Binder{ public BindService getService(){ return BindService.this; } } 4)onBind()返回mybinder 对象: public IBinder onBind(Intent intent) { return myBinder; } 5)通过serviceconnection获取Binder myBinder = new MyBinder(); @Nullable @Override public IBinder onBind(Intent intent) { return myBinder; } class MyBinder extends Binder{ public BindService getService(){
extends Service { private int count; private boolean quit; //定义onBinder 方法所返回的对象 private MyBinder binder = new MyBinder(); //实现MyBinder public class MyBinder extends Binder{ public int class MainActivity extends AppCompatActivity { private Button bind,ubind,getServiceStatus; //创建myBinder 对象 private BindService.MyBinder binder; //定义一个ServiceConnection对象 private ServiceConnection 对象 binder = (BindService.MyBinder) service; } @Override public
22 23 private EditText edittext; 24 private TextView textview; 25 private MyService.MyBinder myBinder; 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 =null){ 91 myBinder.setData(edittext.getText().toString()); 92 = (MyService.MyBinder) service; //同步数据,将数据传给MyService 100 myBinder.getService().setCallback (); 18 } 19 20 public class MyBinder extends Binder{ 21 22 public void setData(String
但是这还没有完,因为 mybinder 只是为你安装好了一些软件依赖。 我们需要 mybinder 代劳。 为了完成上述两个步骤,你就需要准备最后一个postBuild文件。 请打开 mybinder 的网址(https://mybinder.org/)。 ? 原理 你是不是觉得,mybinder 很黑科技? 其实,也不算。 它只是把已有的几项技术,链接了起来。 这大概也算是“积木式创新”的一个实例吧。 我们看看 mybinder 的说明: ? 、执行与修改代码; mybinder 转换 github repo 的幕后英雄 docker 简介。
成员 * 通过调用该成员的 basicTypes 方法 , 可以与该进程进行数据传递 */ class MyBinder extends IMyAidlInterface.Stub myBinder; @Override public void onCreate() { super.onCreate(); // 创建 Binder 对象 myBinder = new MyBinder(); // 启动前台进程 startService(); } " 本地前台进程 " LocalForegroundService myBinder; /** * 连接对象 */ private Connection connection; /** * AIDL 远程调用接口 = new MyBinder(); // 启动前台进程 startService(); } private void startService(){
代码示例: // 服务端 public class MyService extends Service { private final IBinder binder = new MyBinder @Override public IBinder onBind(Intent intent) { return binder; } public class MyBinder @Override public void onServiceConnected(ComponentName className, IBinder service) { MyBinder myBinder = (MyBinder) service; MyService myService = myBinder.getService(); } @Override
绑定服务调用服务方法的过程 通过bindservice方式实现调用服务里面业务逻辑方法: 步骤: 1、在服务类中创建一个中间人MyBinder,继承了Binder,Binder实现了IBinder接口: public class MyBinder extends Binder{ } 2、在服务类里面创建了一个MyBinder的成员变量: private MyBinder myBinder ; 3、在MyBinder类中写一个方法用于调用服务的业务逻辑方法: public class MyBinder extends Binder{ //使用中间人调用服务里的方法 对象 myBinder = (MyBinder) service; } /** * 服务断开成功时调用这个方法 IService { public void callMethodInService(); } 2、让服务中的中间人实现了服务的接口类: private class MyBinder
android.util.Log; 8 9 /* 10 * 11 */ 12 public class MyService extends Service { 13 14 private MyBinder myBinder= new MyBinder(); 15 16 @Override 17 //成功绑定时调用该方法 18 public IBinder onBind( // TODO Auto-generated method stub 20 Log.d("MyService", "onBind"); 21 return myBinder onStart"); 53 super.onStart(intent, startId); 54 } 55 56 //绑定类 57 public class MyBinder IBinder service) { 14 // TODO Auto-generated method stub 15 myService=((MyService.MyBinder
timer.schedule(mRunTimerTask, 3000L,2 * 1000L); Log.e(TAG, "计时器已开启"); return new MyBinder mRunTimerTask.cancel(); Log.e(TAG, "计时器已取消"); return super.onUnbind(intent); } } 2.MyBinder * 说明:Service的onBind方法返回一个IBinder对象 * 该对象在是Service与Activity的连接人,在Activity可以获取该对象 */ public class MyBinder public void onServiceConnected(ComponentName name, IBinder service) { MyBinder binder = (MyBinder) service; binder.methodInService(); }
mBinder = new MyBinder(); @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate myBinder; private ServiceConnection connection = new ServiceConnection() { @Override public void = (MyService.MyBinder) service; myBinder.startDownload(); } }; @Override protected void onCreate 在onServiceConnected()方法中,我们又通过向下转型得到了MyBinder的实例,有了这个实例,Activity和Service之间的关系就变得非常紧密了。 现在我们可以在Activity中根据具体的场景来调用MyBinder中的任何public方法,即实现了Activity指挥Service干什么Service就去干什么的功能。
mBinder; // 此对象用于绑定的service与调用者之间的通信 public class MyBinder extends Binder { /** object Log.e(TAG,"onBind"); if (mBinder == null) { mBinder = new MyBinder public void onServiceConnected(ComponentName name, IBinder service) { RestartAppService.MyBinder mBinder = (RestartAppService.MyBinder) service; myService = mBinder.getService(); 此时Application的ServiceConnection.onServiceConnected()被调用并返回MyBinder对象。
还行~ binder URL:https://mybinder.org 使用文档:https://mybinder.readthedocs.io/en/latest/index.html# ? 结合Github的示例用法:https://mybinder.org/v2/gh/ + <用户名/仓库名> + /分支名 + ? filepath= + ipynb文件名 例如:https://mybinder.org/v2/gh/yeshan333/JupyterNotebook-Show-sample/master?
public IBinder onBind(Intent intent) { //当执行完了onCreate后,就会执行onBind把操作歌曲的方法返回 return new MyBinder e.printStackTrace(); } Log.e("服务", "准备播放音乐"); } //该方法包含关于歌曲的操作 public class MyBinder class MainActivity extends AppCompatActivity { private MyConnection conn; private MusicService.MyBinder public void onServiceConnected(ComponentName name, IBinder service) { //获得service中的MyBinder musicControl = (MusicService.MyBinder) service; //更新按钮的文字 updatePlayText
mBinder = new MyBinder(); @Override public void onCreate() { super.onCreate(); stopService; private Button bindService; private Button unbindService; private MyService.MyBinder myBinder; //创建ServiceConnection的匿名类 private ServiceConnection connection = new ServiceConnection //通过向下转型得到了MyBinder的实例 myBinder = (MyService.MyBinder) service; //在Activity调用Service类的方法 myBinder.service_connect_Activity(); } }; @Override
mBinder = new MyBinder(); @Override public void onCreate() { super.onCreate(); stopService; private Button bindService; private Button unbindService; private MyService.MyBinder myBinder; //创建ServiceConnection的匿名类 private ServiceConnection connection = new ServiceConnection //通过向下转型得到了MyBinder的实例 myBinder = (MyService.MyBinder) service; //在Activity调用Service类的方法 myBinder.service_connect_Activity(); } }; @Override
咱们用 mybinder ,是为了给读者们提供一个一致性的代码运行环境。 你可以免安装,运行样例代码。可以修改代码重新运行,甚至可以上传数据文件,做自己的分析。 我需要补充说明一个重要事项—— mybinder 为咱们提供的 Python 运行环境资源,是共享的,并非永久独占空间。 每个同学,打开相同的一个链接后,mybinder 都开启一个独立的环境,大家互不干扰。 但是,Python 环境的运行,是需要后台的资源支持的。 你每打开一个 mybinder 的链接,后台都要给你提供对应的 CPU、内存、硬盘等一系列资源。 如果这些资源被大量用户长期占用,平台无法承受。新的用户也就无法再加入使用了。 mybinder 平台和用户的约定,是如果你超过十分钟“不活跃”(inactivity),系统就会关闭你的会话(session),以回收资源,服务更多有需要的用户。
Service 绑定方法 @Override public IBinder onBind(Intent intent) { Log.i(TAG, "----onBind----"); MyBinder myBinder = new MyBinder(); return myBinder; } // Service 解除绑定方法 @Override public boolean onUnbind @Override public IBinder onBind(Intent intent) { Log.i(TAG, "----onBind----"); MyBinder myBinder = new MyBinder(); return myBinder; } @Override public boolean onUnbind show(); isBindService=false; } }/** * 该类提供 绑定组件与绑定服务提供接口 * */ public class MyBinder
. /** * 类MyBinder继承Binder实现接口IService */ private class MyBinder extends Binder implements 定义类MyBinder继承Binder实现接口IService中的函数 @Override public void callPlayMusic(String path) 返回自定义类MyBinder对象 return new MyBinder(); } 然后我们转到Activity来绑定服务 //4.
myBinder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate @Override public void onServiceConnected(ComponentName name, IBinder service) { myBinder = (CertificationService.MyBinder) service; } // Android 系统会在与服务的连接意外中断时(例如当服务崩溃或被终止时 ", Toast.LENGTH_SHORT).show(); } } public class MyBinder extends Binder { public (10); // myBinder.callPlayMaJiang(); // 接口里没有这个方法 // myBinder.callXiSangNa(); }
binder = new MyBinder(); private final Random generator = new Random(); @Override public myBinder = (TestService.MyBinder)binder; service = myBinder.getService(); Log.i myBinder = (TestService.MyBinder)binder; service = myBinder.getService(); Log.i MyBinder的TestService。 在示例中,我们实例化了一个MyBinder的实例binder作为TestService的字段,并且将其作为onBind的返回值。