Android:Service(一)——Service的基本使用

Service的基本信息

service是androi中四大組件之一(Activity,Service,BroadcastReceiver,Content ProVider),作爲四大組件之一可見Service的重要性。

那麼Service有什麼用呢?
Service是用來運行沒有界面的任務,在後臺默默無聞地工作。比如即時通訊軟件需要監聽服務器有沒有新的消息,天氣預報app需要定時更新天氣信息,音樂播放器在後臺播放音樂等~這些任務都合適在service中執行。

爲什麼要使用Service運行這些任務?
如果我們在Activity中開啓一條子線程運行一個任務,在退出該Activity之後該子線程還能繼續運行~依然能達到後臺運行的效果~爲什麼還需要使用Service那麼麻煩呢?
主要是android垃圾回收機制的問題,我們在退出activity之後系統不會立刻回收相關的資源,所以纔會導致退出了activity之後子線程任務還能繼續運行。但是這個時候不回收不代表下一秒不回收啊~一旦系統把它給回收了~那麼activity的子線程也隨之結束掉。而使用Service運行這些需要長時間運行而不需要界面的任務則可以保證不到內存很緊缺的情況下,service也不會被回收~
android的垃圾回收是有優先級的:
1.最先回收的是已經退出了,但是還沒回收的資源。也就是剛纔所說的退出了activity還有子線程的那種情況
2.其次就是還沒退出,但是已經看不到的activity
3.再到service
4.正在顯示的Activity
5.用戶正在操作的Activity

可以看到service的回收順序是在第三位,處於中間位置,不會很容易就被回收掉~

Service的基本用法

接下來就看看service是如何使用的。
跟Activity一樣,作爲四大組件之一,在使用上也有相同之處~
首先創建一個java類,讓它繼承Service。由於service是沒有界面的,當然也不需要什麼佈局文件啦。
package com.example.javy.servicedemo1;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class MyService extends Service {
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.e("server_threadid", Thread.currentThread().getId() + "");
    }
}


每一個activity都需要在AndroidManifest.xml文件上註冊之後才能使用,service也不例外。

 <service
            android:name=".MyService"
            android:enabled="true"
            android:exported="true" >
        </service>

其中的enabled屬性代表該service能否被實例化,exported代表能否被其它應用程序調用。
如果沒有什麼特別的需求可以不指定這兩個屬性。

做完這兩步~一個android service就已經定義出來了。
接下來看看怎樣調用開啓這個service。

我們可以使用intent調用service,我們就在activity裏調用該service:
  Intent intent=new Intent(this,MyService.class);
        startService(intent);
可以看到跟調用開啓一個新的activity並無二致,不過不同的是在不指定activity啓動模式的情況下調用activity的時候每調用一次就會新建一個activity。而service則不會,service只會存在一個,如果已經存在了service,再調用開啓service也不會新建service了。

當需要停止service的時候可以調用
stopSelf();
或者
stopService()
就可以停止該service。

service的生命週期

與activity的生命週期不同,service的生命週期只有:onCreate,onStartCommand,onDestroy.
在初始調用開啓service的時候會調用onCreate,onStart,在停止Service的時候則會回調onDestroy
前面說過如果service已經在運行,再調用的話只會回調onStartCommand而不會調用onCreate。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章