A. 原創:android怎麼讓一個service開機自動啟動
Android開機啟動Service,需要使用BroadcastReceiver,Android系統,開機會發送一個開機廣播,可以通過BroadcastReceiver來接收開機廣播。
具體代碼:
1.在配置文件AndroidManifest.xml中向系統注冊receiver
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
2.需要添加相應許可權
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
3.在Receiver中就可以添加開機需要進行的操作
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
4.執行開機後的操作,Intent intent = new Intent(context,Service.class); context.startService(intent); 這樣即可開機啟動Service了。
分享
本回答由電腦網路分類達人 孟男男認證
2015-02-05 18:47
#芝麻嘉年華,給你不一樣的新春驚喜!#
提問者採納
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<!-- 開機啟動 -->
<receiver android:name=".BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
public class BootBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
B. android怎麼調用系統服務
1、Started
Started的Service,通過在Application里用startService(Intent intent)方法來啟動。這種類型的Service一經啟動,會在後面無休止地運行,即使啟動它的Activity被Destroy掉。要停止此類型的Service,可在Service中調用stopSelf()或在Application中調用stopService(Intent intent),要不然就只能等Android系統在系統資源緊張的時候把它殺掉。
2、Bound
Bound的Service,通過在Application里調用bindService()方法來啟動。該類型的Service與Application綁定在一起,一旦綁定的所有Application消失了,Android會Detroy掉該Service。也可以主動調用unbindService()方法來解綁Service。
有時候我們想在Activity中獲知Service的狀態,例如一個音樂播放器,Service負責音樂播放,Activity負責顯示當前歌曲名和播放進度。
可以用Broadcast,這個也不失為一個解決方法。
但如果可以獲取Service實例,那麼就可以調用Service中自定義的一些方法來獲取Service狀態了。
首先要明確的是,第一種類型的Service是無能為力的。因為Activity與Service之間並沒有相關聯的介面,即使這個Service是在Activity里start的,一旦start,兩者不再有關聯。
C. Android中如何啟用Service,如何停用Service
• Context.startService()
• Context.bindService()
1. 在同一個應用任何地方調用 startService() 方法就能啟動 Service 了,然後系統會回調 Service 類的
onCreate() 以及 onStart() 方法。這樣啟動的 Service 會一直運行在後台,直到
Context.stopService() 或者 selfStop() 方法被調用。另外如果一個 Service 已經被啟動,其他代碼再試圖調用
startService() 方法,是不會執行 onCreate() 的,但會重新執行一次 onStart() 。
2. 另外一種 bindService() 方法的意思是,把這個 Service 和調用 Service
的客戶類綁起來,如果調用這個客戶類被銷毀,Service 也會被銷毀。用這個方法的一個好處是,bindService() 方法執行後
Service 會回調上邊提到的 onBind() 方發,你可以從這里返回一個實現了 IBind
介面的類,在客戶端操作這個類就能和這個服務通信了,比如得到 Service 運行的狀態或其他操作。如果 Service
還沒有運行,使用這個方法啟動 Service 就會 onCreate() 方法而不會調用 onStart()。
總結:
1.
startService()的目的是回調onStart()方法,onCreate()
方法是在Service不存在的時候調用的,如果Service存在(例如之前調用了bindService,那麼Service的onCreate方法
已經調用了)那麼startService()將跳過onCreate() 方法。
2.
bindService()目的是回調onBind()方法,它的作用是在Service和調用者之間建立一個橋梁,並不負責更多的工作(例如一個
Service需要連接伺服器的操作),一般使用bindService來綁定到一個現有的Service(即通過StartService啟動的服
務)。
由於Service 的onStart()方法只有在startService()啟動Service的情況下才調用,故使用onStart()的時候要注意這點。
D. android上怎樣讓一個Service開機自動啟動
Android開機啟動Service,需要使用BroadcastReceiver,Android系統,開機會發送一個開機廣播,可以通過BroadcastReceiver來接收開機廣播。
具體代碼:
1.在配置文件AndroidManifest.xml中向系統注冊receiver
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
2.需要添加相應許可權
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
3.在Receiver中就可以添加開機需要進行的操作
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
4.執行開機後的操作,Intent intent = new Intent(context,Service.class); context.startService(intent); 這樣即可開機啟動Service了。
E. 手機安卓系統更新後一直處於這個畫面,Android正在啟動,正在優化第一
安卓手機顯示正在優化的處理方法:顯示正在優化通常是在手機更新完系統後第一次開機進入桌面時,此為正常現象,等待優化完成後會自動進入桌面,如遇特殊情況優化一直無法完成,多為更新故障,可以進入rec重新安裝更新包,雙清重啟手機後再試。
F. 如何在Android中添加系統服務
仔細閱讀源碼可以發現,在frameworks/base/services/java/com/Android/server/SystemServer.java中添加了很多服務,什麼熵信息、電量、wife等等服務,這些服務啟動都在launcher之前,一般要繼承Binder或者繼承一個AIDL。下面試著來添加一個簡單系統服務
G. 如何創建android系統服務
1、 撰寫一個aidl文件,定義服務的介面,將在編譯過程中通過aidl工具生成對應的java介面。一般系統服務的aidl文件都放在framework\base\core\java\android\os目錄中。
以我所寫的IMyTool.aidl為例。在.aidl中定義自己需要加入的方法,編寫規則和java介面差不多,這里不多說。
2、 將aidl文件名添加到frameworks\base\目錄下的Android.mk編譯腳本文件中。
如:
LOCAL_SRC_FILES += \
core/java/android/accessibilityservice/.aidl\
…\
core/java/android/os/IMyTool.aidl\
…
IMyTool.aidl即我加進去的aidl文件,加入後才能在make過程中編譯到,否則將在後面的SystemServer添加系統服務時會報錯提示找不到對應類。
3、 編寫真正工作的服務類,繼承IMyTool.Stub類(AIDL文件名.Stub,aidl生成的介面中的內部類,是一個Binder)。
服務類一般都放在framework\base\services\java\com\android\server目錄中。
例如:
public class MyToolService extends IMyTool.Stub {
實現IMyTool.aidl中定義的介面。
}
4、 將自定義服務注冊到SystemServer,使得開機過程中被添加。
在framework\base\services\java\com\android\server目錄中的SystemServer中啟動服務代碼處加入:
try {
Slog.i(TAG, "MyToolService");
ServiceManager.addService(Context.MY_TOOL_SERVICE,new MyToolService(context));// MyToolService構造函數自己定義,一般都會用到Context
} catch(Throwable e) {
Slog.e(TAG, "Failure startingMyToolService", e);
}
上面代碼中Context.MY_TOOL_SERVICE是自己在Context類中定義的常量,也就是給服務定義的名字,使用常量方便獲取服務,而不需要記住注冊服務時用的名字,且想換名字時只需改一個常量的值。
H. android 怎樣啟動後台服務
後台服務就是後台運行的意思,只要單擊任務欄上代表這程序的按鈕,原來後台運行的程序就會到前台來,前台運行的程序就會到後台去了。如下圖所示。
Windows 7可以打開幾個窗口,每個任務分配一個窗口,各個窗口可以重疊、排開、放大、縮小、移動等,可以方便地在各打開的窗口間切換,各個打開的應用程序共享電腦資源,多任務環境對用戶是透明的,每個任務都可以按前台、後台和獨佔三種方式進行。
多任務並存時,打開一個窗口後,在任務欄的空白處單擊滑鼠右鍵,然後在彈出的快捷菜單中可以選擇層疊、橫向平鋪或縱向平鋪等。
當Windows 7打開了幾個窗口時,實際上只有一個是你可以對它進行操作的窗口,叫做當前活動窗口。在所有打開窗口的最前面,標題欄底色為深色的窗口為當前活動窗口。單擊任務欄上的按鈕,或按下換檔鍵加製表鍵,即可以把這個窗口切換為當前活動窗口。
任何已經打開,不在前台運行的窗口,在後台仍然是活動的,佔用內存和中央處理器等系統資源,所以,從這個意義上來說,長時間不用的窗口要及時關閉,方法是單擊應用程序窗口標題欄右上角的關閉按鈕。
;一個應用程序,無論是否最小化,在任務欄上都會以按鈕的形式顯示出來,當前活動窗口的應用程序的按鈕呈凹陷形狀,其餘呈隆起形狀。因此,判斷一個窗口是否關閉,只要看其是否還在任務欄中即可。
I. Android中怎麼啟動關閉Service及功能解釋
啟動:
//首先注冊服務
<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()方法.
J. 如何查看android 系統當前啟動的service
進入設置界面-》應用程序-》正在運行
會看到所有手機當前運行的程序和服務,可以手動進行關閉。