<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
上一節:Activity
簡介:在Android元件中最基本也是最為常見的四大元件:
Service是Android系統中的四大元件之一,它是一種長生命週期的,沒有視覺化介面,執行於後臺的一種服務程式。
Service 有的啟動方式有兩種:
首先我們建立一個MyService 類,並且繼承自Service
public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } }
這裡需要先實現onBind方法,onBind()
是Service必須實現的方法,返回的IBinder物件相當於Service元件的代理物件,Service允許其他程式元件通過IBinder物件來存取Service內部資料,這樣即可實現其他程式元件與Service之間的通訊。
在AndroidManifest.xml
清單檔案中註冊
<!-- 元件必須要在清單檔案裡面註冊--> <service android:name=".MyService" />
顯式啟動通過類名稱來啟動,需要在Intent中指明Service所在的類,並呼叫startService (lntent)啟動service。這裡我使用按鈕測試,需要在activity 中新增一個 serviceStart 按鈕,用來演示
public void onClick(View view) { startService(new Intent(this, MyService.class)); }
回到MyService 類,並且新增一個onCreate 生命週期,用於驗證我們的啟動
@Override public void onCreate() { super.onCreate(); System.out.println("MyService.onCreate service 啟動成功"); }
執行結果
通過該方式啟動Service,存取者與Service之間沒有關聯,即使存取者退出了,Service也仍然執行。
按上面的說法,即使存取者退出了,Service也仍然執行,那麼我們該怎麼結束呢?
我們在Activity 中,再新增一個停止按鈕。
顯式啟動停止Service,需要將啟動Service的Intent傳遞給stopService (Intent)函數。
public void onClickStop(View view) { stopService(new Intent(this, MyService.class)); }
回到MyService 類,並且新增一個onDestroy 生命週期,用於驗證我們的停止
@Override public void onDestroy() { super.onDestroy(); System.out.println("MyService.onDestroy service 停止"); }
執行結果
上面我說startService 是顯示啟動,那麼是不是還有對應的隱式啟動呢?確實是有,但是從Android5.0開始,Google要求必須使用顯示Intent啟動Service,所以隱式啟動咱就不介紹了。
我們在回到Activity 中,再新增兩個按鈕,onClickBindServiceStart 和 onClickUnBindService 按鈕
public void onClickBindServiceStart(View view) { bindService(new Intent(this, MyService.class), connection, Context.BIND_AUTO_CREATE); }
引數說明:
onServiceConnected ()
方法,當繫結意外斷開後,系統將呼叫ServiceConnnection中的onServiceDisconnected方法。初始化一個connection
private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { } @Override public void onServiceDisconnected(ComponentName componentName) { } };
繫結啟動中,當呼叫者通過bindService()
函數繫結Service時,onCreate()
函數和onBinde ( )
函數將被先後呼叫。
執行結果
通過該方式啟動Service,存取者與Service繫結在一起,存取者一旦退出了,Service也就終止了。
取消繫結僅需要使用unbindService()
方法,並將ServiceConnnection傳遞給unbindService()
方法
在停止服務點選事件中使用 unbindService()
方法
public void onClickUnBindService(View view) { unbindService(connection); }
回到MyService 類,新增onUnbind 生命週期方法
@Override public boolean onUnbind(Intent intent) { System.out.println("MyService.onUnbind"); return super.onUnbind(intent); }
當呼叫者通過unbindService()
函數取消繫結Service時,onUnbind()
函數將被呼叫。如果onUnbind()
函數返回true,則表示重新系結服務時,onRebind ()
函數將被呼叫。
執行結果
需要注意的是,unbindService()
方法成功後,系統並不會呼叫onServiceConnected()
,因為onServiceConnected()
只會在意外斷開繫結時才被呼叫。
這裡別忘了在onDestroy()
銷燬bindService
@Override protected void onDestroy() { super.onDestroy(); unbindService(connection); }
onCreate() 當Service第一次被建立時,由系統呼叫。
onStartCommand() 當startService方法啟動Service時,該方法被呼叫。
onDestroy() 當Service不再使用時,由系統呼叫。
注意:一個startService只會建立一次,銷燬一次,但可以開始多次,因此,onCreate()和onDestroy()方法只會被呼叫一次,而onStart()方法會被呼叫多次。
onCreate() 當Service被建立時,由系統呼叫。
onBind() 當bindService方法啟動Service時,該方法被呼叫。
onUnbind() 當unbindService方法解除繫結時,該方法被呼叫。
onDestroy() 當Service不再使用時,由系統呼叫。
注意:一個bindService可以建立多次,銷燬多次,重複使用。
到此這篇關於Android四大元件之Service服務詳細講解的文章就介紹到這了,更多相關Android Service服務內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45