绑定服务调用本地服务中的方法
生活随笔
收集整理的這篇文章主要介紹了
绑定服务调用本地服务中的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如果想調用服務中的方法, 通過startService()是做不到的, 這時需要用bindService來解決.
下面的demo是在Activity中調用Service中的自定義方法---methodInService
這個demo可以解決在項目開發中調用service里的數據。
這里在service中使用到了代理模式。這是為了,給service組件和activity組件中間添加一個中間人。
通過代理來傳遞數據。也就是binder對象。這個代理就是接口IService
?
Service中的代碼如下:
?
1 public class DemoService extends Service { 2 3 /** 4 * 內部的小蜜,可以調用服務內部的方法 5 * 將小蜜私有了,建一個接口,提供對外訪問的方法 6 */ 7 private class Xiaomi extends Binder implements IService{ 8 //通過這個方法調用服務中的方法 9 //重寫接口中的抽象方法 10 public void callMethodInService(int money){ 11 if(money > 100){ 12 //這里調用了服務里的方法 13 methodInService(); 14 }else{ 15 System.out.println("這點錢還想辦事啊?"); 16 } 17 } 18 19 public void 洗桑拿(){ 20 System.out.println("一起洗桑拿"); 21 } 22 } 23 24 /** 25 * 在執行bindService時調用該方法 26 * IBinder相當于內部的小蜜 27 */ 28 @Override 29 public IBinder onBind(Intent intent) { 30 System.out.println("2,服務如果成功綁定,會執行onBind方法,返回IBinder小蜜"); 31 return new Xiaomi(); 32 } 33 34 @Override 35 public void onCreate() { 36 System.out.println("服務已經開啟了"); 37 38 } 39 40 @Override 41 public void onDestroy() { 42 System.out.println("服務已經關閉了"); 43 super.onDestroy(); 44 } 45 46 /** 47 * 服務中的方法 48 */ 49 public void methodInService(){ 50 System.out.println("6,你成功調用了服務中的方法"); 51 } 52 53 }?
IService接口代碼如下:
?
1 public interface IService { 2 3 public void callMethodInService(int money); 4 5 }?
Activity中的代碼如下:
?
1 public class MainActivity extends Activity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 } 8 9 MyConn conn; 10 //創建接口的對象 11 IService myBinder; 12 13 //綁定服務 14 public void bindService(View view) { 15 System.out.println("1,綁定服務"); 16 Intent intent = new Intent(this, DemoService.class); 17 conn = new MyConn(); 18 bindService(intent, conn, BIND_AUTO_CREATE); 19 } 20 21 //解綁服務 22 public void unbindService(View view) { 23 24 unbindService(conn); 25 } 26 27 /** 28 * 調用服務里的方法 29 */ 30 public void callService(View view) { 31 //通過內部的小蜜可以間接調用服務里的方法 32 System.out.println("5,利用myBinder間接調用服務里的方法"); 33 myBinder.callMethodInService(500); 34 } 35 36 37 /** 38 * 服務成功連接的通訊頻道 39 */ 40 private class MyConn implements ServiceConnection{ 41 42 //服務成功連接時 43 @Override 44 public void onServiceConnected(ComponentName name, IBinder service) { 45 System.out.println("3,得到了服務的鏈接,獲取到了小蜜"); 46 myBinder = (IService) service; 47 System.out.println("4,將IBinder強制轉換為小蜜myBinder"); 48 } 49 50 //服務連接不成功時 51 @Override 52 public void onServiceDisconnected(ComponentName name) { 53 54 } 55 } 56 }?
關鍵代碼已經用紅色標出
?
在這個demo中, Activity想直接調用服務中的方法是辦不到的, 于是可以定義一個代理Iservice接口,
讓Service中的內部類Xiaomi來實現該接口, 并重寫抽象方法, 這樣就可以在Activity中調用了.
?
轉載于:https://www.cnblogs.com/wanghaoyuhappy/p/5293696.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的绑定服务调用本地服务中的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何获取汉字拼音首字母?一般用于通讯录
- 下一篇: [转]linux tr命令详解