Anroid四大組件service之本地服務(wù)的示例代碼
服務(wù)是Android四大組件之一,與Activity一樣,代表可執(zhí)行程序。但Service不像Activity有可操作的用戶界面,它是一直在后臺運行。用通俗易懂點的話來說:
如果某個應(yīng)用要在運行時向用戶呈現(xiàn)可操作的信息就應(yīng)該選擇Activity,如果不是就選擇Service。
Service的生命周期如下:
Service只會被創(chuàng)建一次,也只會被銷毀一次。那么,如何創(chuàng)建本地服務(wù)呢?
實現(xiàn)代碼如下:
package temp.com.androidserivce; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.SystemClock; import android.support.annotation.Nullable; import android.util.Log; /** * Created by Administrator on 2017/8/18. */ public class Myservice extends Service { @Override public void onCreate() { Log.i("test", "服務(wù)被創(chuàng)建"); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("test", "服務(wù)被啟動"); new Thread(new myRunnable(startId)).start(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { Log.i("test", "服務(wù)被銷毀"); super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } class myRunnable implements Runnable { int startId; public myRunnable(int startId) { this.startId = startId; } @Override public void run() { for (int i = 0; i < 10; i++) { SystemClock.sleep(1000); Log.i("test", i + ""); } //停止服務(wù) //stopSelf(); stopSelf(startId); //當(dāng)用無參數(shù)的停止服務(wù)時,將會銷毀第一次所啟動的服務(wù); //當(dāng)用帶參數(shù)的停止服務(wù)時,將會銷毀最末次所啟動的服務(wù); } } }
要聲明服務(wù),就必須在manifests中進(jìn)行配置
<manifest ... > ... <application ... > <service android:name=".Myservice" android:exported="true"/> ... </application> </manifest>
android:exported="true" 設(shè)置了這個屬性就表示別人也可以使用你的服務(wù)。
還有一個需要注意的小點,在Myservice中可以看見我啟動時用了一個子線程去幫我實現(xiàn)工作,那么我為什么沒有直接把for循環(huán)的那段代碼寫在onStartCommand方法中呢,是因為寫在onStartCommand中將會報ANR程序無響應(yīng)的錯誤。就是當(dāng)你所有的事情都去交給主線程做時,就會造成主線程內(nèi)存溢出,它就會炸了。這個時候也可以用IntentService來取代Service。
package temp.com.androidserivce; import android.app.IntentService; import android.content.Intent; import android.os.SystemClock; import android.util.Log; /** * Created by Administrator on 2017/8/18. */ public class MyService2 extends IntentService { public MyService2() { super(""); } public MyService2(String name) { super(name); } @Override protected void onHandleIntent(Intent intent) { for (int i = 0; i <10 ; i++) { SystemClock.sleep(1000); Log.i("test",i+""); } } }
使用這個相對而言會比較簡單。IntentService是Service的子類。它使用工作線程逐一處理所有啟動請求。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android Service服務(wù)詳細(xì)介紹及使用總結(jié)
- Android Service服務(wù)不被停止詳解及實現(xiàn)
- Android中Service服務(wù)詳解(二)
- Android中Service服務(wù)詳解(一)
- Android四大組件之Service(服務(wù))實例詳解
- Android Service 服務(wù)不被殺死的妙招
- Android中Service(后臺服務(wù))詳解
- android開發(fā)教程之開機(jī)啟動服務(wù)service示例
- Android創(chuàng)建服務(wù)之started service詳細(xì)介紹
相關(guān)文章
詳談Matrix中preTranslate()和postTranslate()的理解
這篇文章主要為大家詳細(xì)介紹了Matrix中preTranslate()和postTranslate()的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11Android內(nèi)存泄漏檢測工具LeakCanary
在Android的性能優(yōu)化中,內(nèi)存優(yōu)化是必不可少的點,而內(nèi)存優(yōu)化最重要的一點就是解決內(nèi)存泄漏的問題,在Android的內(nèi)存泄漏分析工具也不少,比如PC端的有:AndroidStudio自帶的Android?Profiler、MAT等工具;手機(jī)端也有,就是我們今天要介紹的LeakCanary2023-04-04Android應(yīng)用開發(fā)中Fragment與Activity間通信示例講解
這篇文章主要介紹了Android應(yīng)用開發(fā)中Fragment與Activity間通信實例講解,需要的朋友可以參考下2016-02-02Android上實現(xiàn)easyconfig(airkiss)方法
本篇文章主要給大家講解了在Android系統(tǒng)上實現(xiàn)easyconfig(airkiss)的方法,有這方面需要的朋友參考學(xué)習(xí)下吧。2018-01-01Android ContentProvider查看/讀取手機(jī)聯(lián)系人實例
本篇文章主要介紹了Android ContentProvider查看/讀取手機(jī)聯(lián)系人實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02Kotlin學(xué)習(xí)筆記之const val與val
這篇文章主要給大家介紹了關(guān)于Kotlin學(xué)習(xí)筆記之const val與val的相關(guān)資料,并給大家介紹了const val和val區(qū)別以及Kotlin中var和val的區(qū)別,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05