當前位置:首頁 » 安卓系統 » android自啟動service

android自啟動service

發布時間: 2023-04-28 17:20:01

Ⅰ Android 之 Service(一)啟動,綁定服務

Service(服務)一個運行在後台執行長時間運行的操作組件,它不提供任何用戶界面,作為與Activity同級的組件,它依舊是運行在主線程中。
其它組件可以啟動一個Service,當這個Service啟動之後便會在後台執行,這里需要注意,由於是在主線程中,所以我們需要另外開啟一個線程來執行我們的耗時操作。
此外,一個組件還可以與一個Service進行綁定來實現組件之間的交互,甚至可以執行IPC(Inter-Process Communication)進程間通信。
Service可以在後台執行很多任務,比如處理網路事務,播放音樂,文件讀寫或者與一個內容提供者交互,等等。

本地服務(Local)
該服務依附在主進程上而不是獨立的進程,這樣在一定程度上節約了資源,另外本地服務因為是在同一進程因此不需要IPC,也不需要AIDL。相應bindService會方便很多,當主進程被Kill後,服務便會終止。一般使用在音樂播放器播放等不需要常駐的服務。

遠程服務(Remote Service)
該服務是獨立的進程,對應進程名格式為所在包名加上你指定的android:process字元串。一般定義方式 android:process=":service" 由於是獨立的進程,因此在Activity所在進程被Kill的時候,該服務依然在運行,不受其他進程影響,有利於為多個進程提供服務具有較高的靈活性。由於是獨立的進程,會佔用一定資源,並且使用AIDL進行IPC比較麻煩。一般用於系統的Service,這種Service是常駐的。

startService啟動的服務
用於啟動一個服務執行後台任務,不與組件進行通信,停止服務使用stopService。 當一個應用組件比如activity通過調用startService()來啟動一個服務的時候,服務便處於啟動狀態。一旦啟動,服務可以在後台無限期地運行下去,即使當啟動它的組件已經銷毀。通常情況下,一個啟動的service執行一個單一的操作並且不會返回任何結果給調用者。

bindService啟動的服務
用於啟動的服務需要進行通信。停止服務使用unbindService。 當一個應用組件通過調用bindService()來與一個服務綁定時,服務便處於綁定狀態。一個綁定的服務提供了一個客戶端-伺服器端介面來允許組件與服務進行交互,發送請求,得到結果甚至通過IPC進程間通信來完成操作。只有當其它組件與服務進行綁定時,服務才會處於綁定狀態。多個組件可以同時與服務綁定,但是當他們全部都解除綁定時,服務就會銷毀。

2.BindService:
如果一個Service在某個Activity中被調用bindService方法啟動,不論bindService被調用幾次,Service的 onCreate 方法只會執行一次,同時 onStartCommand 方法始終不會調用。當建立連接後,Service會一直運行,除非調用unbindService來接觸綁定、斷開連接或調用該Service的Context不存在了(如Activity被Finish——即通過bindService啟動的Service的生命周期依附於啟動它的Context),系統在這時會自動停止該Service。

3.StartService AND BindService:
當一個Service在被啟動(startService 的同時又被綁定(bindService ),該Service將會一直在後台運行,並且不管調用幾次, onCreate 方法始終只會調用一次, onStartCommand 的調用次數與startService 調用的次數一致(使用bindService 方法不會調用 onStartCommand )。同時,調用unBindService 將不會停止Service,必須調用stopService 或Service自身的stopSelf 來停止服務。

4.停止Service:
當一個服務被終止(stopService 、stopSelf 、unbindService )時, onDestory 方法將會被調用——所以我們需要在該方法中清除一些工作(依附該Service生命周期上的,比如:停止在Service中創建並運行的線程)。

1.創建服務

如果你才用的是 startService的方式那麼 onBind方法可以忽略
2.注冊服務

3.開啟服務
start:

bind

綁定服務,一般涉及到組件或進程之間的通信,既然需要通信,那麼我們肯定需要一個連接,這里ServiceConnection就是我們所需要的連接,通過Ibinder的傳遞,我們可以獲取到Service的Ibinder對象,從而進行相關操作。

關於粘性服務,這里需要提到 Service的onStartCommand返回值

andorid:name

adroid:exported

android:enabled

android:label

android:process

android:icon

android:permission

關於服務,當我們在應用開發中,如果需要長時間的在後台運行,獨立完成某一些事情的情況下,請使用Service!

此文綜合: http://www.jianshu.com/p/1e49e93c3ec8 以及自己的一些問題看法,用作學習,回顧之用。

Service 前台服務
請參看 紫豪 http://www.jianshu.com/p/5505390503fa

Ⅱ android怎麼實現開機自動啟動Service或app

Android手機在啟動的過程中會觸發一個Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED。
在這里我們可以通過構建一個廣播接收者來接收這個這個action
(1).
public class TextBroadcastReceiver extends BroadcastReceiver {
//重寫onReceive方法
@Override
public void onReceive(Context context, Intent intent) {
//後邊的XXX.class就是要啟動的服務
Intent service = new Intent(context,XXXclass);
context.startService(service);
Log.v("TAG", "開機自動服務自動啟動.....");
//啟動應用,參數為需要自動啟動的應用的包名
Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);

context.startActivity(intent );
}

}
(2):配置xml文件,在receiver接收這種添加intent-filter配置
<receiver android:name="TextBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
(3):添加許可權 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

Ⅲ Android Service啟動方式

1.startService
①.定義一個類繼承service
②.在manifest.xml文件中配置該service
③.使用context的startService(intent)啟動該service
④.不再使用時,調用stopService(Intent)停止該服務
2.bindService
①.創建bindService服務段,繼承自service並在類中,創建一個實現binder介面的實例對象並提供公共方法給客戶端調用
②.從onbind()回調方法返回此binder實例
③.在客戶端中,從onserviceconnected()回調方法接收binder,並使用提供的方法調用綁定服務

Ⅳ Android 啟動後台運行程序(Service)

Android開發中,當需要創建在後台運行的程序的時候,就要使用到Service。Service 可以分為有無限生命和有限生命兩種。

特別需要注意的是Service跟Activities是不同的(簡單來說可以理解為後台與前台的區別),例如,如果需要使用Service的話,需要調用startService(),從而利用startService()去調用Service中的OnCreate()和onStart()方法來啟動一個後台的Service。

啟動一個Service的過程如下:context.startService() ->onCreate()- >onStart()->Service running其中onCreate()可以進行一些服務的初始化工作,onStart()則啟動服務。

停止一個Service的過程如下:context.stopService() | ->onDestroy() ->Service stop

接下來的實例是一個利用後台服務播放音樂的小例子,點擊start運行服務,點擊stop停止服務。ServicesDemo.java(是一個Activity)

除此之外還要在Manifest裡面聲明服務:(AndroidManifest.xml)

定義Service(MyService.java)

layout文件夾中是main.xml

values 文件夾中是strings.xm

Ⅳ android上怎樣讓一個Service開機自動啟動

1. 首先開機尺核啟動後系統會發出一個Standard Broadcast Action,名字叫 android.intent.action.BOOT_COMPLETED ,這個Action只會發出一次。2. 構造一個IntentReceiver類, 重構其抽象方法onReceiveIntent(Context context, Intent intent), 在其中帶孫啟動你想要啟動的Service。3.在AndroidManifest. xml中,首先加入 <uses-permission android:name=android.permission.RECEIVE_BOOT_COMPLETED</uses-permission 來獲得BOOT_COMPLETED的使用許可,然後注冊前面重構的IntentReceiver類,在其 <intent-filter中加入<actionandroid:name=android.intent.action.BOOT_COMPLETED / ,陵行掘以使其能捕捉到這個Action。一個例子xml:<uses-permission android:name=android.permission.RECEIVE_BOOT_COMPLETED</uses-permission <receiver android:name=.OlympicsReceiver android:label=@string/app_name <intent-filter <action android:name=android.intent.action.BOOT_COMPLETED / <category android:name=android.intent.category.LAUNCHER / </intent-filter </receiverjava:public class OlympicsReceiver extends IntentReceiver{/*要接收的intent源*/ static final String ACTION = android.intent.action.BOOT_COMPLETED; public void onReceiveIntent(Context context, Intent intent){if (intent.getAction().equals(ACTION)){context.startService(new Intent(context, OlympicsService.class), null);//啟動倒計時服務 Toast.makeText(context, OlympicsReminder service has started!, Toast.LENGTH_LONG).show();}}}注意:現在的IntentReceiver已經變為BroadcastReceiver,OnReceiveIntent為onReceive。所以java這邊的代碼為: (也可以實現應用程序開機自動啟動) public class OlympicsReceiver extends BroadcastReceiver{/*要接收的intent源*/ static final String ACTION = android.intent.action.BOOT_COMPLETED; public void onReceive(Context context, Intent intent){if (intent.getAction().equals(ACTION)){context.startService(new Intent(context, OlympicsService.class), null);//啟動倒計時服務//這邊可以添加開機自動啟動的應用程序代碼}}}

Ⅵ Android怎麼讓一個service開機自動啟動

你好,
手機啟動完成之後皮圓,系統會發送一個叫android.intent.action.BOOT_COMPLETED的廣播,在程序中接收這個廣哪枝播,然後啟動一個後台服務,就李握敏會實現程序一開機即啟動

Ⅶ 安卓怎麼自動啟動service

1、首先創建一個廣播接收者,重構其抽象方法onReceive(Context context, Intent intent),在其中啟動你想要啟動的Service。import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class BootBroadcastReceiver extends BroadcastReceiver {
//重寫onReceive方法
@Override
public void onReceive(Context context, Intent intent) {
//後邊的XXX.class就是要啟動的服務
Intent service = new Intent(context,XXXclass);
context.startService(service);
Log.v("TAG", "開機自動服務自動啟動.....");

}

}
配置xml文件,在receiver接收這種添加intent-filter配置
<receiver android:name="BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
添加許可權處理
<!--此許可權在高版本中可以省略,你可以測試-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
創建你需要啟動的service處理(的XXX)類,並在androidMainfest.xml文件中添加(XXX)service的配置即可。

Ⅷ Android8.0 啟動後台Service

在一加手機上,用戶升級了新版8.0的系統,用戶將app切到後台,過一會兒就彈出「xxx app 已停止運行」的彈窗。

通過定位分析,發現下面倆前置條件

馬上跑了26的模擬器,果然復現,日誌如下:

我查閱了 android官網 ,有如下一段描述:

解決方法就很簡單了,把激清Service互啟的邏輯塊改為:

有個簡寫: ContextCompat.startForegroundService(context, intent)
因為我襪橡不想讓用戶在控制面板看到通知欄,我沒有在創建服務後的五秒內調用 startForeground() 。我馬上試了一下,果然沒有了「已停止運行」,但是日誌爆出了另一個ANR的錯誤,雖然不是在主線程,也沒有彈窗,但畢竟是個錯誤,我想一探究竟。

回到官方的描述:在被啟動的Service創建服務後的五秒內調用 startForground(0, new Notification()) ,如果不調用或調用時間明好前超過5秒會拋出一個ANR。
果不其然,我只有調用了,這樣更好,有前台進程,系統想殺都殺不掉了。

但仔細看一下官方文檔,你會發現,官方推薦使用 JobScheler ,這是api25的新特性。

Ⅸ Android 開機自啟動service實踐

Android 設備啟動的時候,會發送android.intent.action.BOOT_COMPLETED的廣播,監聽這個廣播來實現開機自啟動。

1) 創建需要的service和 BroadcastReceiver
2) 在AndroidManifest.xml 注冊service 和BroadcastReceiver

3)申明許可權
```
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

}

Ⅹ Android怎麼讓一個service開機自動啟動

Android中,當Service被kill後,如果重啟需要使用BroadcastReceiver來實現,即廣播接收者,笑茄尺例如利用BroadcastReceiver注冊網路廣播或者開關機廣播,當接收到廣播後直接啟動service,這樣就可以保證service被kill後,自動啟動。
實現代碼:
1.在配置文件AndroidManifest.xml中向系統注冊BroadcastReceiver
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</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了。

熱點內容
資料庫表設計教程 發布:2025-09-16 10:50:47 瀏覽:340
朋友圈緩存如何清除 發布:2025-09-16 10:49:57 瀏覽:438
sqlserver數據類型 發布:2025-09-16 10:41:16 瀏覽:732
如何配置全站時間同步系統 發布:2025-09-16 10:19:13 瀏覽:167
java解析json文件 發布:2025-09-16 10:10:41 瀏覽:968
車配置字母怎麼看 發布:2025-09-16 10:09:32 瀏覽:408
煙台電腦伺服器維修 發布:2025-09-16 10:08:45 瀏覽:268
編譯命令cl 發布:2025-09-16 09:57:21 瀏覽:520
小君直播密碼是多少 發布:2025-09-16 09:25:46 瀏覽:610
用中文編譯的編程軟體 發布:2025-09-16 09:04:37 瀏覽:152