服務(wù)是Android四大組件之一,與Activity一樣,代表可執(zhí)行程序。但Service不像Activity有可操作的用戶界面,它是一直在后臺(tái)運(yùn)行。用通俗易懂點(diǎn)的話來(lái)說(shuō):
為老河口等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及老河口網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、老河口網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
如果某個(gè)應(yīng)用要在運(yùn)行時(shí)向用戶呈現(xiàn)可操作的信息就應(yīng)該選擇Activity,如果不是就選擇Service。
Service的生命周期如下:
Service只會(huì)被創(chuàng)建一次,也只會(huì)被銷毀一次。那么,如何創(chuàng)建本地服務(wù)呢?
實(shí)現(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ù)被啟動(dòng)"); 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)用無(wú)參數(shù)的停止服務(wù)時(shí),將會(huì)銷毀第一次所啟動(dòng)的服務(wù); //當(dāng)用帶參數(shù)的停止服務(wù)時(shí),將會(huì)銷毀最末次所啟動(dòng)的服務(wù); } } }
要聲明服務(wù),就必須在manifests中進(jìn)行配置
... ...
android:exported="true" 設(shè)置了這個(gè)屬性就表示別人也可以使用你的服務(wù)。
還有一個(gè)需要注意的小點(diǎn),在Myservice中可以看見(jiàn)我啟動(dòng)時(shí)用了一個(gè)子線程去幫我實(shí)現(xiàn)工作,那么我為什么沒(méi)有直接把for循環(huán)的那段代碼寫(xiě)在onStartCommand方法中呢,是因?yàn)閷?xiě)在onStartCommand中將會(huì)報(bào)ANR程序無(wú)響應(yīng)的錯(cuò)誤。就是當(dāng)你所有的事情都去交給主線程做時(shí),就會(huì)造成主線程內(nèi)存溢出,它就會(huì)炸了。這個(gè)時(shí)候也可以用IntentService來(lái)取代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+""); } } }
使用這個(gè)相對(duì)而言會(huì)比較簡(jiǎn)單。IntentService是Service的子類。它使用工作線程逐一處理所有啟動(dòng)請(qǐng)求。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。