前言
在Android中,Activity主要負責前臺頁面的展示,Service主要負責需要長期運行的任務,所以在我們實際開發中,就會常常遇到Activity與Service之間的通信,本文就給大家詳細介紹了關于Android中Service和Activity相互通信的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
Activity向Service通信
第一種方式:通過MyBinder方式調用Service方法
MainActivity
public class MainActivity extends Activity { private MyConn conn; private MyBinder myBinder;//我定義的中間人對象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(this,BanZhengService.class); //連接服務 conn = new MyConn(); bindService(intent, conn, BIND_AUTO_CREATE); } //點擊按鈕調用服務里面辦證的方法 public void click(View v) { myBinder.callBanZheng(10000000); } //監視服務的狀態 private class MyConn implements ServiceConnection{ //當服務連接成功調用 @Override public void onServiceConnected(ComponentName name, IBinder service) { //獲取中間人對象 myBinder = (MyBinder) service; } //失去連接 @Override public void onServiceDisconnected(ComponentName name) { }} @Override protected void onDestroy() { //當activity 銷毀的時候 解綁服務 unbindService(conn); super.onDestroy(); } }BanZhengService
public class BanZhengService extends Service { //把我定義的中間人對象返回 @Override public IBinder onBind(Intent intent) { return new MyBinder(); } //辦證的方法 public void banZheng(int money){ if (money>1000) { Toast.makeText(getApplicationContext(), "我是領導 把證給你辦了", 1).show(); }else { Toast.makeText(getApplicationContext(), "這點錢 還想辦事....", 1).show(); } } //[1]定義中間人對象(IBinder) public class MyBinder extends Binder{ public void callBanZheng(int money){ //調用辦證的方法 banZheng(money); } }}第二種方式:通過接口Iservice調用Service方法
MainActivity
public class MainActivity extends Activity { private MyConn conn; private Iservice myBinder;//我定義的中間人對象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(this,DemoService.class); //連接服務 conn = new MyConn(); bindService(intent, conn, BIND_AUTO_CREATE); } //點擊按鈕調用服務里面辦證的方法 public void click(View v) { myBinder.callBanZheng(10000000);// myBinder.callPlayMaJiang();// myBinder.callXiSangNa(); } //監視服務的狀態 private class MyConn implements ServiceConnection{ //當服務連接成功調用 @Override public void onServiceConnected(ComponentName name, IBinder service) { //獲取中間人對象 myBinder = (Iservice) service; } //失去連接 @Override public void onServiceDisconnected(ComponentName name) { } } @Override protected void onDestroy() { //當activity 銷毀的時候 解綁服務 unbindService(conn); super.onDestroy(); } }DemoService
public class DemoService extends Service { //把我定義的中間人對象返回 @Override public IBinder onBind(Intent intent) { return new MyBinder(); } //辦證的方法 public void banZheng(int money){ if (money>1000) { Toast.makeText(getApplicationContext(), "我是領導 把證給你辦了", 1).show(); }else { Toast.makeText(getApplicationContext(), "這點錢 還想辦事....", 1).show(); } } //打麻將的方法 public void playMaJiang(){ System.out.println("陪領導打麻將"); } //洗桑拿的方法 public void 洗桑拿(){ System.out.println("陪領導洗桑拿"); } //[1]定義中間人對象(IBinder) private class MyBinder extends Binder implements Iservice{ public void callBanZheng(int money){ //調用辦證的方法 banZheng(money); } public void callPlayMaJiang(){ //調用playMaJiang 的方法 playMaJiang(); } public void callXiSangNa(){ //調用洗桑拿的方法 洗桑拿(); }}}接口Iservice
public interface Iservice { //把領導想暴露的方法都定義在接口里 public void callBanZheng(int money);// public void callPlayMaJiang(); }總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。
新聞熱點
疑難解答