如题所述
ããå¯å¨ï¼
ãã//é¦å 注åæå¡
ãã<service
ããandroid:name="com.wangdeyu.service.MusicService"
ããandroid:exported="false" >
ãã<intent-filter>
ãã<action android:name="com.abc" />
ãã</intent-filter>
ãã</service>
ãã
ãã//å¯å¨æå¡
ããIntent service=new Intent(" com.abc");
ããstartService(service);
ãã//Serviceçå½å¨æ
ããâ onCreate() å建Service
ããâ¡onStart(Intent intent, int startId) å¯å¨Service
ããâ¢onDestroy() éæ¯Service
ãã//å ³éæå¡
ããstopService(service);
ãã
ããServiceççå½å¨ææ¹æ³æ¯Activityå°ä¸äºï¼åªæonCreate, onStart, onDestroy
ããæ们æ两ç§æ¹å¼å¯å¨ä¸ä¸ªService,ä»ä»¬å¯¹Serviceçå½å¨æçå½±åæ¯ä¸ä¸æ ·çã
ãã1 éè¿startService,å°±æ¯ä¸é¢è¿ç§
ããServiceä¼ç»å onCreate --> onStart
ããstopServiceçæ¶åç´æ¥onDestroy
ããå¦ææ¯ è°ç¨è ç´æ¥éåºè没æè°ç¨stopServiceçè¯ï¼Serviceä¼ä¸ç´å¨åå°è¿è¡ã
ããä¸æ¬¡è°ç¨è åèµ·æ¥ä»ç¶å¯ä»¥stopServiceã
ãã2 éè¿bindService
ããServiceåªä¼è¿è¡onCreateï¼ è¿ä¸ªæ¶å è°ç¨è åServiceç»å®å¨ä¸èµ·
ããè°ç¨è éåºäºï¼Sreviceå°±ä¼è°ç¨onUnbind-->onDestroyed
ããæè°ç»å®å¨ä¸èµ·å°±å ±å亡äºã
ãã注æï¼ServiceçonCreateçæ¹æ³åªä¼è¢«è°ç¨ä¸æ¬¡ï¼
ããå°±æ¯ä½ æ 论å¤å°æ¬¡çstartServiceå bindServiceï¼Serviceåªè¢«å建ä¸æ¬¡ã
ããå¦æå æ¯bindäºï¼é£ä¹startçæ¶åå°±ç´æ¥è¿è¡ServiceçonStartæ¹æ³ï¼
ããå¦æå æ¯startï¼é£ä¹bindçæ¶åå°±ç´æ¥è¿è¡onBindæ¹æ³ãå¦æä½ å bindä¸äºï¼å°±stopä¸æäºï¼
ããåªè½å UnbindService, åStopService,æ以æ¯å startè¿æ¯å bindè¡ä¸ºæ¯æåºå«çã
ããAndroidä¸çæå¡åwindowsä¸çæå¡æ¯ç±»ä¼¼çä¸è¥¿ï¼æå¡ä¸è¬æ²¡æç¨æ·æä½çé¢ï¼å®è¿è¡äºç³»ç»ä¸ä¸å®¹æ被ç¨æ·åè§ï¼å¯ä»¥ä½¿ç¨å®å¼åå¦çæ§ä¹ç±»çç¨åºã
ããæå¡ä¸è½èªå·±è¿è¡ï¼éè¦éè¿è°ç¨Context.startService()æContext.bindService()æ¹æ³å¯å¨æå¡ã
ããè¿ä¸¤ä¸ªæ¹æ³é½å¯ä»¥å¯å¨Serviceï¼ä½æ¯å®ä»¬ç使ç¨åºåææä¸åã使ç¨startService()æ¹æ³å¯ç¨æå¡ï¼è°ç¨è ä¸æå¡ä¹é´æ²¡æå ³è¿ï¼
ããå³ä½¿è°ç¨è éåºäºï¼æå¡ä»ç¶è¿è¡ã使ç¨bindService()æ¹æ³å¯ç¨æå¡ï¼è°ç¨è ä¸æå¡ç»å®å¨äºä¸èµ·ï¼è°ç¨è ä¸æ¦éåºï¼æå¡ä¹å°±ç»æ¢ï¼å¤§æâä¸æ±åæ¶çï¼å¿ é¡»åæ¶æ»âçç¹ç¹ã
ããå¦ææç®éç¨Context.startService()æ¹æ³å¯å¨æå¡ï¼å¨æå¡æªè¢«å建æ¶ï¼ç³»ç»ä¼å è°ç¨æå¡çonCreate()æ¹æ³ï¼
ããæ¥çè°ç¨onStart()æ¹æ³ãå¦æè°ç¨startService()æ¹æ³åæå¡å·²ç»è¢«å建ï¼å¤æ¬¡è°ç¨startService()æ¹æ³å¹¶ä¸ä¼å¯¼è´å¤æ¬¡å建æå¡ï¼
ããä½ä¼å¯¼è´å¤æ¬¡è°ç¨onStart()æ¹æ³ãéç¨startService()æ¹æ³å¯å¨çæå¡ï¼åªè½è°ç¨Context.stopService()æ¹æ³ç»ææå¡ï¼æå¡ç»ææ¶ä¼è°ç¨onDestroy()æ¹æ³ã
ããå¦ææç®éç¨Context.bindService()æ¹æ³å¯å¨æå¡ï¼å¨æå¡æªè¢«å建æ¶ï¼ç³»ç»ä¼å è°ç¨æå¡çonCreate()æ¹æ³ï¼
ããæ¥çè°ç¨onBind()æ¹æ³ãè¿ä¸ªæ¶åè°ç¨è åæå¡ç»å®å¨ä¸èµ·ï¼è°ç¨è éåºäºï¼ç³»ç»å°±ä¼å è°ç¨æå¡çonUnbind()æ¹æ³ï¼
ããæ¥çè°ç¨onDestroy()æ¹æ³ãå¦æè°ç¨bindService()æ¹æ³åæå¡å·²ç»è¢«ç»å®ï¼
ããå¤æ¬¡è°ç¨bindService()æ¹æ³å¹¶ä¸ä¼å¯¼è´å¤æ¬¡å建æå¡åç»å®(ä¹å°±æ¯è¯´onCreate()åonBind()æ¹æ³å¹¶ä¸ä¼è¢«å¤æ¬¡è°ç¨)ã
ããå¦æè°ç¨è å¸æä¸æ£å¨ç»å®çæå¡è§£é¤ç»å®ï¼å¯ä»¥è°ç¨unbindService()æ¹æ³ï¼è°ç¨è¯¥æ¹æ³ä¹ä¼å¯¼è´ç³»ç»è°ç¨æå¡çonUnbind()-->onDestroy()æ¹æ³.
ãã//é¦å 注åæå¡
ãã<service
ããandroid:name="com.wangdeyu.service.MusicService"
ããandroid:exported="false" >
ãã<intent-filter>
ãã<action android:name="com.abc" />
ãã</intent-filter>
ãã</service>
ãã
ãã//å¯å¨æå¡
ããIntent service=new Intent(" com.abc");
ããstartService(service);
ãã//Serviceçå½å¨æ
ããâ onCreate() å建Service
ããâ¡onStart(Intent intent, int startId) å¯å¨Service
ããâ¢onDestroy() éæ¯Service
ãã//å ³éæå¡
ããstopService(service);
ãã
ããServiceççå½å¨ææ¹æ³æ¯Activityå°ä¸äºï¼åªæonCreate, onStart, onDestroy
ããæ们æ两ç§æ¹å¼å¯å¨ä¸ä¸ªService,ä»ä»¬å¯¹Serviceçå½å¨æçå½±åæ¯ä¸ä¸æ ·çã
ãã1 éè¿startService,å°±æ¯ä¸é¢è¿ç§
ããServiceä¼ç»å onCreate --> onStart
ããstopServiceçæ¶åç´æ¥onDestroy
ããå¦ææ¯ è°ç¨è ç´æ¥éåºè没æè°ç¨stopServiceçè¯ï¼Serviceä¼ä¸ç´å¨åå°è¿è¡ã
ããä¸æ¬¡è°ç¨è åèµ·æ¥ä»ç¶å¯ä»¥stopServiceã
ãã2 éè¿bindService
ããServiceåªä¼è¿è¡onCreateï¼ è¿ä¸ªæ¶å è°ç¨è åServiceç»å®å¨ä¸èµ·
ããè°ç¨è éåºäºï¼Sreviceå°±ä¼è°ç¨onUnbind-->onDestroyed
ããæè°ç»å®å¨ä¸èµ·å°±å ±å亡äºã
ãã注æï¼ServiceçonCreateçæ¹æ³åªä¼è¢«è°ç¨ä¸æ¬¡ï¼
ããå°±æ¯ä½ æ 论å¤å°æ¬¡çstartServiceå bindServiceï¼Serviceåªè¢«å建ä¸æ¬¡ã
ããå¦æå æ¯bindäºï¼é£ä¹startçæ¶åå°±ç´æ¥è¿è¡ServiceçonStartæ¹æ³ï¼
ããå¦æå æ¯startï¼é£ä¹bindçæ¶åå°±ç´æ¥è¿è¡onBindæ¹æ³ãå¦æä½ å bindä¸äºï¼å°±stopä¸æäºï¼
ããåªè½å UnbindService, åStopService,æ以æ¯å startè¿æ¯å bindè¡ä¸ºæ¯æåºå«çã
ããAndroidä¸çæå¡åwindowsä¸çæå¡æ¯ç±»ä¼¼çä¸è¥¿ï¼æå¡ä¸è¬æ²¡æç¨æ·æä½çé¢ï¼å®è¿è¡äºç³»ç»ä¸ä¸å®¹æ被ç¨æ·åè§ï¼å¯ä»¥ä½¿ç¨å®å¼åå¦çæ§ä¹ç±»çç¨åºã
ããæå¡ä¸è½èªå·±è¿è¡ï¼éè¦éè¿è°ç¨Context.startService()æContext.bindService()æ¹æ³å¯å¨æå¡ã
ããè¿ä¸¤ä¸ªæ¹æ³é½å¯ä»¥å¯å¨Serviceï¼ä½æ¯å®ä»¬ç使ç¨åºåææä¸åã使ç¨startService()æ¹æ³å¯ç¨æå¡ï¼è°ç¨è ä¸æå¡ä¹é´æ²¡æå ³è¿ï¼
ããå³ä½¿è°ç¨è éåºäºï¼æå¡ä»ç¶è¿è¡ã使ç¨bindService()æ¹æ³å¯ç¨æå¡ï¼è°ç¨è ä¸æå¡ç»å®å¨äºä¸èµ·ï¼è°ç¨è ä¸æ¦éåºï¼æå¡ä¹å°±ç»æ¢ï¼å¤§æâä¸æ±åæ¶çï¼å¿ é¡»åæ¶æ»âçç¹ç¹ã
ããå¦ææç®éç¨Context.startService()æ¹æ³å¯å¨æå¡ï¼å¨æå¡æªè¢«å建æ¶ï¼ç³»ç»ä¼å è°ç¨æå¡çonCreate()æ¹æ³ï¼
ããæ¥çè°ç¨onStart()æ¹æ³ãå¦æè°ç¨startService()æ¹æ³åæå¡å·²ç»è¢«å建ï¼å¤æ¬¡è°ç¨startService()æ¹æ³å¹¶ä¸ä¼å¯¼è´å¤æ¬¡å建æå¡ï¼
ããä½ä¼å¯¼è´å¤æ¬¡è°ç¨onStart()æ¹æ³ãéç¨startService()æ¹æ³å¯å¨çæå¡ï¼åªè½è°ç¨Context.stopService()æ¹æ³ç»ææå¡ï¼æå¡ç»ææ¶ä¼è°ç¨onDestroy()æ¹æ³ã
ããå¦ææç®éç¨Context.bindService()æ¹æ³å¯å¨æå¡ï¼å¨æå¡æªè¢«å建æ¶ï¼ç³»ç»ä¼å è°ç¨æå¡çonCreate()æ¹æ³ï¼
ããæ¥çè°ç¨onBind()æ¹æ³ãè¿ä¸ªæ¶åè°ç¨è åæå¡ç»å®å¨ä¸èµ·ï¼è°ç¨è éåºäºï¼ç³»ç»å°±ä¼å è°ç¨æå¡çonUnbind()æ¹æ³ï¼
ããæ¥çè°ç¨onDestroy()æ¹æ³ãå¦æè°ç¨bindService()æ¹æ³åæå¡å·²ç»è¢«ç»å®ï¼
ããå¤æ¬¡è°ç¨bindService()æ¹æ³å¹¶ä¸ä¼å¯¼è´å¤æ¬¡å建æå¡åç»å®(ä¹å°±æ¯è¯´onCreate()åonBind()æ¹æ³å¹¶ä¸ä¼è¢«å¤æ¬¡è°ç¨)ã
ããå¦æè°ç¨è å¸æä¸æ£å¨ç»å®çæå¡è§£é¤ç»å®ï¼å¯ä»¥è°ç¨unbindService()æ¹æ³ï¼è°ç¨è¯¥æ¹æ³ä¹ä¼å¯¼è´ç³»ç»è°ç¨æå¡çonUnbind()-->onDestroy()æ¹æ³.
温馨提示:答案为网友推荐,仅供参考
第1个回答 2018-07-28
启动:
//首先注册服务
<service
android:name="com.wangdeyu.service.MusicService"
android:exported="false" >
<intent-filter>
<action android:name="com.abc" />
</intent-filter>
</service>
//启动服务
Intent service=new Intent(" com.abc");
startService(service);
//Service生命周期
①onCreate() 创建Service
②onStart(Intent intent, int startId) 启动Service
③onDestroy() 销毁Service
//关闭服务
stopService(service);
Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy
我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。
1 通过startService,就是上面这种
Service会经历 onCreate --> onStart
stopService的时候直接onDestroy
如果是 调用者 直接退出而没有调用stopService的话,Service会一直在后台运行。
下次调用者再起来仍然可以stopService。
2 通过bindService
Service只会运行onCreate, 这个时候 调用者和Service绑定在一起
调用者退出了,Srevice就会调用onUnbind-->onDestroyed
所谓绑定在一起就共存亡了。
注意:Service的onCreate的方法只会被调用一次,
就是你无论多少次的startService又 bindService,Service只被创建一次。
如果先是bind了,那么start的时候就直接运行Service的onStart方法,
如果先是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,
只能先UnbindService, 再StopService,所以是先start还是先bind行为是有区别的。
Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。
服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。
这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,
即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,
接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,
但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,
接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,
接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,
多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。
如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法.
//首先注册服务
<service
android:name="com.wangdeyu.service.MusicService"
android:exported="false" >
<intent-filter>
<action android:name="com.abc" />
</intent-filter>
</service>
//启动服务
Intent service=new Intent(" com.abc");
startService(service);
//Service生命周期
①onCreate() 创建Service
②onStart(Intent intent, int startId) 启动Service
③onDestroy() 销毁Service
//关闭服务
stopService(service);
Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy
我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。
1 通过startService,就是上面这种
Service会经历 onCreate --> onStart
stopService的时候直接onDestroy
如果是 调用者 直接退出而没有调用stopService的话,Service会一直在后台运行。
下次调用者再起来仍然可以stopService。
2 通过bindService
Service只会运行onCreate, 这个时候 调用者和Service绑定在一起
调用者退出了,Srevice就会调用onUnbind-->onDestroyed
所谓绑定在一起就共存亡了。
注意:Service的onCreate的方法只会被调用一次,
就是你无论多少次的startService又 bindService,Service只被创建一次。
如果先是bind了,那么start的时候就直接运行Service的onStart方法,
如果先是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,
只能先UnbindService, 再StopService,所以是先start还是先bind行为是有区别的。
Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。
服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。
这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,
即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。
如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,
接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,
但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,
接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,
接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,
多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。
如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法.