多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 第四章 Android開發三大基石―Activity、Service和Handler(4)

第四章 Android開發三大基石―Activity、Service和Handler(4)

來源:程序員人生   發布時間:2015-01-29 08:52:24 閱讀次數:3770次

4.2 千變萬化的服務-Service開發

Service是Android系統中運行在后臺、不和用戶交互利用組件。它和Activity的級別差不多,只能在后臺運行。每一個Service必須在manifest文件中 通過<service>來聲明。

4.2.1 Service的生命周期

Service的生命周期其實不像Activity那末復雜,它只繼承了onCreate(),onStart(),onDestroy()3個方法,當我們第1次啟動Service的時候,前后調用onCreate()、onStart()這兩個方法,當停止Service的時候,則履行onDestroy()方法,這里需要注意的是,如果Service已啟動了,當我們再次啟動Service時,不會再履行onCreate()方法,而是直接履行onStart()方法。Service的啟動有StartService和BindService兩種方法,這兩種方法對Service生命周期的影響是不1樣的。

下面,我們分別來看看這兩種方法是如何影響Service生命周期的:

1)  StartService啟動Service

用這類方法啟動Service,Service會經歷 onCreate 然后是onStart,接著1直處于運行狀態,直到stopService的時候調用onDestroy方法。如果是調用者自己直接退出而沒有調用stopService的話,Service會1直在后臺運行。

2)  BindService啟動Service

通過這類方法啟動Service,Service會運行onCreate,然后是調用onBind, 這個時候調用者和Service綁定在1起。調用者退出了,Srevice就會調用onUnbind->onDestroyed方法。所謂綁定在1起就共存亡了。調用者也能夠通過調用unbindService方法來停止服務,這時候候Srevice就會調用onUnbindonUnbind->onDestroyed方法。

4.2.2 Service的啟動和停止

我們已對Service的生命周期有了1定的了解,Service的啟動方式不同,它的生命周期也不相同。下面,就讓我們來看看Service究竟是如何啟動和停止的。

服務不能自己運行,需要通過調用Context.startService()或Context.bindService()方法啟動服務。這兩個方法都可以啟動Service,但是它們的使用處合有所不同。

1)使用startService()方法啟用服務,調用者與服務之間沒有關連,即便調用者退出了,服務依然運行。

    如果打算采取Context.startService()方法啟動服務,在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onStart()方法。

如果調用startService()方法前服務已被創建,屢次調用startService()方法其實不會致使屢次創建服務,但會致使屢次調用onStart()方法。

采取startService()方法啟動的服務,只能調用Context.stopService()方法結束服務,服務結束時會調用onDestroy()方法。

2)使用bindService()方法啟用服務,調用者與服務綁定在了1起,調用者1旦退出,服務也就終止,大有“不求同生,必須同死”的特點。

onBind()只有采取Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務綁定時被調用,當調用者與服務已綁定,屢次調用Context.bindService()方法其實不會致使該方法被屢次調用。

采取Context.bindService()方法啟動服務時只能調用onUnbind()方法消除調用者與服務消除,服務結束時會調用onDestroy()方法。

4.2.3 我的服務我來用―本地服務(Localservice)開發

本地服務用于利用程序內部。它可以啟動并運行,直到有人停止了它或它自己停止。在這類方式下,它以調用Context.startService()來啟動,調用Context.stopService()來停止。它也能夠調用Service.stopSelf() 或Service.stopSelfResult()來自己停止。不論調用了多少次startService()方法,你只需要調用1次stopService()就能夠停止服務。

它用于實現利用程序自己的1些耗時任務,比如查詢升級信息,它其實不占用利用程序Activity所屬線程,而只是單開線程后臺履行,這樣用戶體驗比較好。

有些服務是不需要和Activity交互就可以直接運行的,而有些則是需要與Activity進行交互。下面,我們通過1些例子來加以說明。

--------------------------------------------
試著放個廣告 現在沒工作 要生存 沒辦法
平安陸金所 隸屬于平安團體的p2p平臺
年投資回報率7%-9% 是替換銀行理財的首選
個人經驗教訓 推薦投資安鑫或有擔保的彩虹項目
不要投資安e 那個幾近沒法轉讓 想提早提現非常困難
注冊鏈接 http://affiliate.lufax.com/action/36XBU
用此鏈接注冊 你我都會有幾10元的額外現金嘉獎
--------------------------------------------
 

1)不和Activity交互的本地服務

首先,我們新建1個LocalService類繼承自Service,代碼以下:

// import略

public class LocalService extends Service{

 

    @Override

    public IBinder onBind(Intent intent) {

        return null;

    }

    @Override

    public void onCreate() {

        super.onCreate();

    }

    @Override

    public void onDestroy() {

        super.onDestroy();

    }

    @Override

    public void onStart(Intent intent, int startId) {

        super.onStart(intent, startId);

    }

}

 

然后,新建1個類ServiceActivity繼承自Actvity,代碼以下:

// import略

public class ServiceActivity extends Activity{

 

private Button startBtn,stopBtn;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.localservice);

        startBtn = (Button)findViewById(R.id.start_button);

        stopBtn = (Button)findViewById(R.id.stop_button);

        startBtn.setOnClickListener(new View.OnClickListener() {

             @Override

             public void onClick(View v) {

                 startService(new Intent("com.char4.LOCAL_SERVICE"));

             }

        });

        stopBtn.setOnClickListener(new View.OnClickListener() {

             @Override

             public void onClick(View v) {

                 stopService(new Intent("com.char4.LOCAL_SERVICE"));

             }

        });

    }

 

}

 

布局文件localservice.xml代碼以下,它定義了兩個按鈕,1個用來啟動Service,1個用來停止Service:

<?xml version="1.0" encoding="utf⑻"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="match_parent">

    <Button

        android:id="@+id/start_button"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="啟動"/>

    <Button

        android:id="@+id/stop_button"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="停止"/>

</LinearLayout>

 

別忘了,在AndroidMainfest.xml中注冊Service:

<service android:name=".LocalService">

<intent-filter>

<action android:name="com.char4.LOCAL_SERVICE " />

<category android:name="android.intent.category.default" />

</intent-filter>

</service>

 

下面,我們來看看效果,如圖4⑺所示:

圖4⑺ startService啟動順序

 

通過日志打印我們可以發現,第1次點擊“啟動”按鈕時,會調用onCreate和onStart方法,在沒有點擊“停止”按鈕前,不管點擊多少次“啟動”按鈕,都只會調用onStart。而點擊“停止”按鈕時則調用onDestroy。再次點擊 “停止”按鈕,會發現不會進入service的生命周期的,即不會再調用onCreate,onStart和onDestroy,而onBind在點擊“啟動”和“停止”按鈕時都沒有調用。

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美日本黄色 | 国产三级日产三级 | 久久精品一级 | 免费观看在线视频 | 国产精品免费大片一区二区 | 图片小说综合 | 亚洲区在线播放 | a一级毛片视频免费看 | 欧美18videosex性极品 | 精品午夜国产在线观看不卡 | 国产日韩欧美亚洲 | 女人与zzzxxxx0oo0 | 那一个欧美一级毛片 | 国产福利一区二区三区在线视频 | 午夜影院在线观看视频 | 久久国产精品久久久 | 亚洲 春色 另类小说 | 欧美视屏 | 国产高清在线精品一区二区三区 | 日韩欧美一中文字幕不卡 | 欧美性生话 | 亚洲无吗在线视频 | 狠狠色综合网 | 国产精品_国产精品_国产精品 | 美女福利视频国产免费观看 | freexx性hd | 日韩欧美在线观看视频 | 在线a级 | 欧美hdxxx| 国产福利不卡视频在免费 | 中文字幕最新 | 91最新地址永久入口 | 久久久久无码国产精品一区 | 国产福利一区二区三区视频在线 | 亚洲图片偷拍区 | 在线观看国产情趣免费视频 | 国产亚洲福利精品一区 | 最新国产福利 | 国产成人影院一区二区 | a级网站| 亚洲国产99在线精品一区二区 |