(ת)AndroidÖ®Serviceѧϰƪһ£ºServiceÆô¶¯·½Ê½Ö®startService

¤… Ñ¡ÔñÄäÃûµÄÓû§   ¤b 2021-6-2 17:15   ¤z 1676   ¤k 0

Ô­µØÖ·:http://blog.csdn.net/wulianghuan/article/details/8596467


Service¸ÅÄî¼°ÓÃ;:

A service is an application component that can perform long-running operations in the background and does not provide a user interface¡£

ͨ³£serviceÓÃÀ´Ö´ÐÐһЩºÄʱ²Ù×÷,»òÕߺǫִ́Ðв»ÌṩÓû§½»»¥½çÃæµÄ²Ù×÷,ÀýÈç:ÏÂÔØ¡¢²¥·ÅÒôÀÖ¡£

ServiceÉúÃüÖÜÆÚ :

Android ServiceµÄÉúÃüÖÜÆÚ²¢²»ÏñActivityÄÇô¸´ÔÓ,ËüÖ»¼Ì³ÐÁËonCreate(),onStart(),onDestroy()Èý¸ö·½·¨,µ±ÎÒÃǵÚÒ»´ÎÆô¶¯Serviceʱ,ÏȺóµ÷ÓÃÁËonCreate(),onStart()ÕâÁ½¸ö·½·¨,µ±Í£Ö¹Serviceʱ,ÔòÖ´ÐÐonDestroy()·½·¨,ÕâÀïÐèҪעÒâµÄÊÇ,Èç¹ûServiceÒѾ­Æô¶¯ÁË,µ±ÎÒÃÇÔÙ´ÎÆô¶¯Serviceʱ,²»»áÔÚÖ´ÐÐonCreate()·½·¨,¶øÊÇÖ±½ÓÖ´ÐÐonStart()·½·¨,¾ßÌåµÄ¿ÉÒÔ¿´ÏÂÃæµÄʵÀý¡£

ServiceÓëActivityͨÐÅ:

Serviceºó¶ËµÄÊý¾Ý×îÖÕ»¹ÊÇÒª³ÊÏÖÔÚÇ°¶ËActivityÖ®ÉϵÄ,ÒòΪÆô¶¯Serviceʱ,ϵͳ»áÖØпªÆôÒ»¸öеĽø³Ì,Õâ¾ÍÉæ¼°µ½²»Í¬½ø³Ì¼äͨÐŵÄÎÊÌâÁË(AIDL)ÕâÒ»½ÚÎÒ²»×÷¹ý¶àÃèÊö,µ±ÎÒÃÇÏë»ñÈ¡Æô¶¯µÄServiceʵÀýʱ,ÎÒÃÇ¿ÉÒÔÓõ½bindServiceºÍonBindService·½·¨,ËüÃÇ·Ö±ðÖ´ÐÐÁËServiceÖÐIBinder()ºÍonUnbind()·½·¨¡£


ÕâÀïÒªÌá¼°Ò»µã:¼Ì³ÐserviceµÄ×ÓÀàÔÚÖØдserviceµÄ·½·¨ÖÐ,³ýÁËÒ»¸öonStart()·½·¨Ö®Íâ,»¹ÓÐÒ»¸öonStartCommand()·½·¨,ÓйØonStartCommand()·½·¨ÉÔ΢×÷µã½éÉÜ:

Android¿ª·¢µÄ¹ý³ÌÖÐ,ÿ´Îµ÷ÓÃstartService(Intent)µÄʱºò,¶¼»áµ÷ÓøÃService¶ÔÏóµÄonStartCommand(Intent,int,int)·½·¨,È»ºóÔÚonStartCommand·½·¨ÖÐ×öһЩ´¦Àí¡£È»ºóÎÒÃÇ×¢Òâµ½Õâ¸öº¯ÊýÓÐÒ»¸öintµÄ·µ»ØÖµ,ÕâƪÎÄÕ¾ÍÊǼòµ¥µØ½²½²int·µ»ØÖµµÄ×÷Óá£
´ÓAndroid¹Ù·½ÎĵµÖÐ,ÎÒÃÇÖªµÀonStartCommandÓÐ4ÖÖ·µ»ØÖµ:

START_STICKY:Èç¹ûservice½ø³Ì±»killµô,±£ÁôserviceµÄ״̬Ϊ¿ªÊ¼×´Ì¬,µ«²»±£ÁôµÝË͵Äintent¶ÔÏó¡£Ëæºóϵͳ»á³¢ÊÔÖØд´½¨service,ÓÉÓÚ·þÎñ״̬Ϊ¿ªÊ¼×´Ì¬,ËùÒÔ´´½¨·þÎñºóÒ»¶¨»áµ÷ÓÃonStartCommand(Intent,int,int)·½·¨¡£Èç¹ûÔÚ´ËÆÚ¼äûÓÐÈκÎÆô¶¯ÃüÁî±»´«µÝµ½service,ÄÇô²ÎÊýIntent½«Îªnull¡£
START_NOT_STICKY:¡°·ÇÕ³ÐԵġ±¡£Ê¹ÓÃÕâ¸ö·µ»Øֵʱ,Èç¹ûÔÚÖ´ÐÐÍêonStartCommandºó,·þÎñ±»Òì³£killµô,ϵͳ½«»á°ÑËüÖÃΪstarted״̬,ϵͳ²»»á×Ô¶¯ÖØÆô¸Ã·þÎñ,Ö±µ½startService(Intent intent)·½·¨Ôٴα»µ÷ÓÃ;¡£
START_REDELIVER_INTENT:ÖØ´«Intent¡£Ê¹ÓÃÕâ¸ö·µ»Øֵʱ,Èç¹ûÔÚÖ´ÐÐÍêonStartCommandºó,·þÎñ±»Òì³£killµô,ϵͳ»á×Ô¶¯ÖØÆô¸Ã·þÎñ,²¢½«IntentµÄÖµ´«Èë¡£
START_STICKY_COMPATIBILITY: START_STICKYµÄ¼æÈÝ°æ±¾,µ«²»±£Ö¤·þÎñ±»killºóÒ»¶¨ÄÜÖØÆô¡£

ÓÐÁË Service ÀàÎÒÃÇÈçºÎÆô¶¯ËûÄØ,ÓÐÁ½ÖÖ·½·¨:

Context.startService()
Context.bindService()


1. ÔÚͬһ¸öÓ¦ÓÃÈκεط½µ÷Óà startService() ·½·¨¾ÍÄÜÆô¶¯ Service ÁË,È»ºóϵͳ»á»Øµ÷ Service ÀàµÄ onCreate() ÒÔ¼° onStart() ·½·¨¡£ÕâÑùÆô¶¯µÄ Service »áÒ»Ö±ÔËÐÐÔÚºǫ́,Ö±µ½ Context.stopService() »òÕß selfStop() ·½·¨±»µ÷Óá£ÁíÍâÈç¹ûÒ»¸ö Service ÒѾ­±»Æô¶¯,ÆäËû´úÂëÔÙÊÔͼµ÷Óà startService() ·½·¨,ÊDz»»áÖ´ÐÐ onCreate() µÄ,µ«»áÖØÐÂÖ´ÐÐÒ»´Î onStart() ¡£

2. ÁíÍâÒ»ÖÖ bindService() ·½·¨µÄÒâ˼ÊÇ,°ÑÕâ¸ö Service ºÍµ÷Óà Service µÄ¿Í»§Àà°óÆðÀ´,Èç¹ûµ÷ÓÃÕâ¸ö¿Í»§Àà±»Ïú»Ù,Service Ò²»á±»Ïú»Ù¡£ÓÃÕâ¸ö·½·¨µÄÒ»¸öºÃ´¦ÊÇ,bindService() ·½·¨Ö´Ðкó Service »á»Øµ÷ÉϱßÌáµ½µÄ onBind() ·½·¢,Äã¿ÉÒÔ´ÓÕâÀï·µ»ØÒ»¸öʵÏÖÁË IBind ½Ó¿ÚµÄÀà,ÔÚ¿Í»§¶Ë²Ù×÷Õâ¸öÀà¾ÍÄܺÍÕâ¸ö·þÎñͨÐÅÁË,±ÈÈçµÃµ½ Service ÔËÐеÄ״̬»òÆäËû²Ù×÷¡£Èç¹û Service »¹Ã»ÓÐÔËÐÐ,ʹÓÃÕâ¸ö·½·¨Æô¶¯ Service ¾Í»á onCreate() ·½·¨¶ø²»»áµ÷Óà onStart()¡£

Çø±ð¸Å¿öΪ:
startService() µÄµ÷ÓÃÕßÓë·þÎñûÓÐÁªÏµ,¼´Ê¹µ÷ÓÃÕßÍ˳öÁË,·þÎñÈÔÈ»ÔËÐÐ,¶øbindService() µÄµ÷ÓÃÕßÓë·þÎñ°óÔÚÒ»Æð,µ÷ÓÃÕßÒ»µ©Í˳öÁË,·þÎñÒ²Ëæ¼´ÖÕÖ¹µô¡£

ÕâÀïÓÃÒ»¸öʵÀý(ʹÓà startService()·½·¨À´Æô¶¯)À´½²½âÒ»ÏÂserviceµÄÉùÃ÷ÖÜÆÚºÍʹÓ÷½·¨:

Ê×Ïȱàдһ¸öÀà¼Ì³ÐServiceÕâ¸ö»ùÀà,ÖØдÀïÃæµÄ·½·¨,È»ºóÔÚActivityÖе÷Óà startService()ºÍstopService()À´Æô¶¯ºÍÍ£Ö¹·þÎñ¡£

ÔËÐнçÃæ:



¹¤³ÌĿ¼½á¹¹:



ExampleService.Java

package com.service.activity;  
  
import android.app.Service;  
import android.content.Intent;  
import android.os.IBinder;  
import android.util.Log;  
  
public class ExampleService extends Service{  
    private static final String TAG = "ExampleService";   
  
    @Override  
    public void onCreate() {  
        Log.i(TAG, "ExampleService-onCreate");  
        super.onCreate();  
    }  
  
    @Override  
    public void onStart(Intent intent, int startId) {  
        Log.i(TAG, "ExampleService-onStart");  
        super.onStart(intent, startId);  
    }  
  
    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {  
        //Ö´ÐÐÎļþµÄÏÂÔØ»òÕß²¥·ÅµÈ²Ù×÷  
        Log.i(TAG, "ExampleService-onStartCommand");  
        /*  
         * ÕâÀï·µ»Ø״̬ÓÐÈý¸öÖµ,·Ö±ðÊÇ:  
         * 1¡¢START_STICKY:µ±·þÎñ½ø³ÌÔÚÔËÐÐʱ±»É±ËÀ,ϵͳ½«»á°ÑËüÖÃΪstarted״̬,µ«ÊDz»±£´æÆä´«µÝµÄIntent¶ÔÏó,Ö®ºó,ϵͳ»á³¢ÊÔÖØд´½¨·þÎñ;  
         * 2¡¢START_NOT_STICKY:µ±·þÎñ½ø³ÌÔÚÔËÐÐʱ±»É±ËÀ,²¢ÇÒûÓÐеÄIntent¶ÔÏ󴫵ݹýÀ´µÄ»°,ϵͳ½«»á°ÑËüÖÃΪstarted״̬,  
         *   µ«ÊÇϵͳ²»»áÖØд´½¨·þÎñ,Ö±µ½startService(Intent intent)·½·¨Ôٴα»µ÷ÓÃ;  
         * 3¡¢START_REDELIVER_INTENT:µ±·þÎñ½ø³ÌÔÚÔËÐÐʱ±»É±ËÀ,Ëü½«»áÔÚ¸ôÒ»¶Îʱ¼äºó×Ô¶¯´´½¨,²¢ÇÒ×îºóÒ»¸ö´«µÝµÄIntent¶ÔÏ󽫻áÔٴδ«µÝ¹ýÀ´¡£  
         */  
        return super.onStartCommand(intent, flags, startId);  
    }  
  
    @Override  
    public IBinder onBind(Intent intent) {  
        Log.i(TAG, "ExampleService-onBind");  
        return null;  
    }  
      
    @Override  
    public void onDestroy() {  
        Log.i(TAG, "ExampleService-onDestroy");  
        super.onDestroy();  
    }  
  
}


MainActivity.java

package com.service.activity;  
  
import android.app.Activity;  
import android.content.Intent;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
  
public class MainActivity extends Activity implements OnClickListener{  
    private static final String TAG = "MainActivity";   //ÈÕÖ¾Êä³ö±êÖ¾  
    private Button btnStartService;  
    private Button btnStopService;  
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        btnStartService = (Button)findViewById(R.id.btnStartService);  
        btnStopService = (Button)findViewById(R.id.btnStopService);  
        btnStartService.setOnClickListener(this);  
        btnStopService.setOnClickListener(this);  
    }  
    //µã»÷ʼþ´¦Àí¼àÌýÆ÷  
    @Override  
    public void onClick(View v) {  
        Intent intent = new Intent(MainActivity.this,ExampleService.class);  
        switch(v.getId()){  
        case R.id.btnStartService:  
            startService(intent);  
            break;  
        case R.id.btnStopService:  
            stopService(intent);  
            break;  
        default:  
            break;  
        }  
    }  
}


×îºóÔÚAndroidManifest.xmlÖжÔservice½øÐÐÉùÃ÷,Ëü¸úActivityͬһ¼¶,¶¼Ð´ÔÚApplication±êÇ©ÀïÃæ:

<service android:name=".ExampleService"/>


´´½¨ÍêÔËÐÐ


ÔÚÔËÐеã»÷"Æô¶¯service"Ö®ºó(µÚÒ»´ÎÆô¶¯service),ÎÒÃÇ¿ÉÒԲ鿴LogCat¿ØÖÆ̨Êä³öµÄÈÕÖ¾ÈçÏÂ:


Õâ¸öʱºòÎÒÃǵã»÷"·µ»Ø",Activity±»¸ÉµôÁË,µ«ÊÇÎÒÃǵķþÎñÈÔÈ»ÔÚÔËÐÐ,¿ÉÒԲ鿴Setting-->Application-->Running Service,½ØͼÈçÏÂ:



È»ºó»Øµ½ÎÒÃǵÄActivity,Ôٴεã»÷Æô¶¯Service,¿ØÖÆ̨Êä³öÈÕÖ¾ÈçÏÂ:


onCreate()·½·¨Ã»Óб»µ÷ÓÃ,˵Ã÷Ëü²¢Ã»ÓÐÖØб»´´½¨¡£

È»ºóÎÒÃǵã»÷Í£Ö¹Service,Êä³öÈÕÖ¾ÈçÏÂ:


·ÖÏíµ½ :
0 ÈËÊÕ²Ø
ÄúÐèÒªµÇ¼ºó²Å¿ÉÒÔ»ØÌû µÇ¼ | Á¢¼´×¢²á

±¾°æ»ý·Ö¹æÔò

»ý·Ö:3875789
Ìû×Ó:775174
¾«»ª:0
ÆÚȨÂÛ̳ ÆÚȨÂÛ̳
·¢²¼
ÄÚÈÝ

ÏÂÔØÆÚȨÂÛ̳ÊÖ»úAPP