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