Android中Service和Activity相互通信示例代碼
前言
在Android中,Activity主要負(fù)責(zé)前臺頁面的展示,Service主要負(fù)責(zé)需要長期運(yùn)行的任務(wù),所以在我們實(shí)際開發(fā)中,就會常常遇到Activity與Service之間的通信,本文就給大家詳細(xì)介紹了關(guān)于Android中Service和Activity相互通信的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(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.activity_main); Intent intent = new Intent(this,BanZhengService.class); //連接服務(wù) conn = new MyConn(); bindService(intent, conn, BIND_AUTO_CREATE); } //點(diǎn)擊按鈕調(diào)用服務(wù)里面辦證的方法 public void click(View v) { myBinder.callBanZheng(10000000); } //監(jiān)視服務(wù)的狀態(tài) private class MyConn implements ServiceConnection{ //當(dāng)服務(wù)連接成功調(diào)用 @Override public void onServiceConnected(ComponentName name, IBinder service) { //獲取中間人對象 myBinder = (MyBinder) service; } //失去連接 @Override public void onServiceDisconnected(ComponentName name) { }} @Override protected void onDestroy() { //當(dāng)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(), "這點(diǎn)錢 還想辦事....", 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ǎn)擊按鈕調(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{ //當(dāng)服務(wù)連接成功調(diào)用 @Override public void onServiceConnected(ComponentName name, IBinder service) { //獲取中間人對象 myBinder = (Iservice) service; } //失去連接 @Override public void onServiceDisconnected(ComponentName name) { } } @Override protected void onDestroy() { //當(dāng)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(), "這點(diǎn)錢 還想辦事....", 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í)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- Android檢測Activity或者Service是否運(yùn)行的方法
- Android中Service與Activity之間通信的幾種方式
- Android Activity與Service通信(不同進(jìn)程之間)詳解
- Android Activity 與Service進(jìn)行數(shù)據(jù)交互詳解
- 淺談Android Activity與Service的交互方式
- Android使用Messenger實(shí)現(xiàn)service與activity交互
- Android實(shí)現(xiàn)Activity、Service與Broadcaster三大組件之間互相調(diào)用的方法詳解
- Android實(shí)現(xiàn)從activity中停止Service的方法
- Android中Service實(shí)時向Activity傳遞數(shù)據(jù)實(shí)例分析
- android使用service和activity獲取屏幕尺寸的方法
- 詳解Android Service與Activity之間通信的幾種方式
相關(guān)文章
Flutter實(shí)現(xiàn)自定義搜索框AppBar的示例代碼
開發(fā)中,頁面頭部為搜索樣式的設(shè)計非常常見,為了可以像系統(tǒng)AppBar那樣使用,本文將利用Flutter自定義一個搜索框,感興趣的可以了解一下2022-04-04Android開發(fā)之ListView的簡單用法及定制ListView界面操作示例
這篇文章主要介紹了Android開發(fā)之ListView的簡單用法及定制ListView界面操作,結(jié)合實(shí)例形式分析了Android ListView界面布局相關(guān)操作技巧,需要的朋友可以參考下2019-04-04基于Fedora14下自帶jdk1.6版本 安裝jdk1.7不識別的解決方法
本篇文章是對Fedora14下自帶jdk1.6版本,安裝jdk1.7不識別的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05adnroid已安裝應(yīng)用中檢測某應(yīng)用是否安裝的代碼實(shí)例
這篇文章主要介紹了Android怎么檢測一個應(yīng)用是否安裝的方法,大家參考使用吧2013-11-11Android UI:ListView - SimpleAdapter實(shí)例詳解
這篇文章主要介紹了Android UI:ListView - SimpleAdapter實(shí)例詳解,SimpleAdapter是擴(kuò)展性最好的適配器,可以定義各種你想要的布局,而且使用很方便,需要的朋友可以參考下2016-11-11Android Tween動畫之RotateAnimation實(shí)現(xiàn)圖片不停旋轉(zhuǎn)效果實(shí)例介紹
Android中如何使用rotate實(shí)現(xiàn)圖片不停旋轉(zhuǎn)的效果,下面與大家共同分析下Tween動畫的rotate實(shí)現(xiàn)旋轉(zhuǎn)效果,感興趣的朋友可以參考下哈2013-05-05