當前位置:首頁 » 安卓系統 » androidservice參數

androidservice參數

發布時間: 2022-09-19 19:52:26

『壹』 Android中怎麼啟動關閉Service及功能解釋

1、 Service不是分離開的進程,除非其他特殊情況,它不會運行在自己的進程,而是作為啟動運行它的進程的一部分。
2、 Service不是線程,這意味著它將在主線程里勞作。
啟動service有兩種方法:
1、 Context.startService()
調用者與服務之間沒有關聯,即使調用者退出,服務仍可運行
2、 Context.bindService()
調用者與服務綁定在一起,調用者一旦退出,服務也就終止
Service的生命周期
如果使用startService()啟動service,系統將通過傳入的Intent在底層搜索相關符合Intent裡面信息的service。如果 服務沒有啟動則先運行onCreate,然後運行onStartCommand (可在裡面處理啟動時傳過來的Intent和其他參數),直到明顯調用stopService或者stopSelf才將停止Service。無論運行 startService多少次,只要調用一次stopService或者stopSelf,Service都會停止。使用stopSelf(int)方 法可以保證在處理好intent後再停止。
控制service運行的主要方式有兩種,主要是根據onStartCommand方法返回的數值。方法:
1、START_STICKY
2、START_NOT_STICKY or START_REDELIVER_INTENT
這里主要解釋這三個變數的意義:
1、 START_STICKY
在運行onStartCommand後service進程被kill後,那將保留在開始狀態,但是不保留那些傳入的intent。不久後service就 會再次嘗試重新創建,因為保留在開始狀態,在創建 service後將保證調用onstartCommand。如果沒有傳遞任何開始命令給service,那將獲取到null的intent
2、 START_NOT_STICKY
在運行onStartCommand後service進程被kill後,並且沒有新的intent傳遞給它。Service將移出開始狀態,並且直到新的 明顯的方法(startService)調用才重新創建。因為如果沒有傳遞任何未決定的intent那麼service是不會啟動,也就是期間 onstartCommand不會接收到任何null的intent。
3、 START_REDELIVER_INTENT
在運行onStartCommand後service進程被kill後,系統將會再次啟動service,並傳入最後一個intent給 onstartCommand。直到調用stopSelf(int)才停止傳遞intent。如果在被kill後還有未處理好的intent,那被 kill後服務還是會自動啟動。因此onstartCommand不會接收到任何null的intent。
客戶端也可以使用bindService來保持跟service持久關聯。謹記:如果使用這種方法,那麼將不會調用onstartCommand(跟 startService不一樣,下面例子注釋也有解析,大家可試試)。客戶端將會在onBind回調中接收到IBinder介面返回的對象。通常 IBinder作為一個復雜的介面通常是返回aidl數據。
Service也可以混合start和bind一起使用。
許可權
要運行service,首先必須在AndroidManifest.xml里申明<service>標簽。
Service能夠保護個人的IPC調用,所以在執行實現該調用時前先使用checkCallingPermission(String) 方法檢查是否有這個許可權。

『貳』 Android service傳遞問題

我只學過java,沒學過C;在我的理解范圍內,java並沒有指針概念。你所說的
class B(Service service) {
mBservice = service;
}
傳過去的是一個對象,當service沒有被啟動的時候,傳過去的就是null。當service啟動的時候,傳過去的是service的一個對象的引用。
也許你真的不該用c的那一套,理解java。java屬於面向對象語言,不存在指針。

『叄』 android在service中怎麼實現

在Activity中可以通過再次startService,來給Service發送消息,而service里的onStartCommand方法也有一個參數,是個int類型的,第一次給service發消息時為1,第二次為2,不斷累加。onStartCommand方法還有一個intent類型的參數,你可以將相應的標志位保存在intent中,這些標志位可以用來控制播放,停止,暫停等。

『肆』 Android如何啟用Service,如何停用Service。

1.第一種是通過調用Context.startService()啟動,調用Context.stopService()結束,startService()可以傳遞參數給Service
2.第二種方式是通過調用Context.bindService()啟動,調用Context.unbindservice()結束,還可以通過ServiceConnection訪問Service。
在Service每一次的開啟關閉過程中,只有onStart可被多次調用(通過多次startService調用),其他onCreate,onBind,onUnbind,onDestory在一個生命周期中只能被調用一次。

『伍』 android里 activity怎麼向service傳遞參數

android中activity中向service傳遞參數,有如下方法:

1.在Activity里注冊一個BroadcastReceiver,Service完成某個任務就可以發一個廣播,接收器收到廣播後通知activity做相應的操作。
2.使用bindService來關聯Service和Application,應用.apk里的所有組件一般情況都運行在同一個進程中,所以不需要用到IPC,bindService成功後,Service的Client可以得到Service返回的一個iBinder引用,具體的參見Service的文檔及onBind的例子,這樣Service的引用就可以通過返回的iBinder對象得到,如
public class LocalService extends Service {
// This is the object that receives interactions from clients. See
// RemoteService for a more complete example.
private final IBinder mBinder = new LocalBinder();

public class LocalBinder extends Binder {
LocalService getService() {
return LocalService.this;
}
}

@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}

之後Client通過這個iBinder對象得到Service對象引用之後,可以直接和Service通訊,比如讀取Service中的值或是調用Service的方法。

『陸』 android啟動一個service,然後用service檢測系統使用intent啟動activity。每次啟動傳遞不同的圖片參數。

startActivity(MyIntent);這個只是顯示activity,而activity實際已經存在,所以他只顯示出來,不刷新。這個是你對activity的生命周期了解還不夠的原因。

解決辦法是在你的activity里onresume()里重寫 refresh()函數就好。這樣就實現了。onresume就再次創建.
private void refresh() {
/*finish();
Intent intent = new Intent(RefreshActivityTest.this, RefreshActivityTest.class);
startActivity(intent);*/

onCreate(null);
}

『柒』 安卓中,怎麼將service中定義的參數拿到activity中去調用,然後再將該參數值返回回去

通過service中的onBind方法,這個方法的參數是Intent,通過Intent就能獲得傳入的值。範例代碼如下:
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.e("onBind", "onBind");
//看這 String url=intent.getStringExtra("url");
return new MyBinder();
}

『捌』 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()方法.

『玖』 android service 中怎樣接受activity傳遞過來的參數

可以參考如下內容:

service類必須實現一個接收方法,接收中傳遞的是intent
@Override
public IBinder onBind(Intent intent) {
Bundle bundle = intent.getExtras();
String stringVal = bundle.getString("stringValue"); //用於接收字元串
int numVal = bundle.getInt("intValue"); //用於接收int類型數據
byte[] bytes = bundle.getByteArray("bytesValue"); //用於接收位元組流,你可以把文件放入位元組流
return null;
}

你可以用Bundle來接受你從Activity發過來的數據,然後使用Bundle提供各個方法來接受數據。
如果僅僅是字元串之類的,
使用getStringExtra方法直接接收即可。
@Override
public IBinder onBind(Intent intent) {
String str1 = intent.getStringExtra("str1");
String str2 = intent.getStringExtra("str2");
return null;
}

熱點內容
7z解壓很慢 發布:2025-01-11 16:51:23 瀏覽:940
電腦改文檔伺服器 發布:2025-01-11 16:41:14 瀏覽:869
編譯匯編語言實例 發布:2025-01-11 16:36:55 瀏覽:670
海康ntp校時伺服器地址 發布:2025-01-11 16:34:35 瀏覽:743
伺服器運行超時怎麼辦 發布:2025-01-11 16:34:32 瀏覽:298
人妖迅雷種子ftp 發布:2025-01-11 16:33:04 瀏覽:916
python將列表轉化為字元串 發布:2025-01-11 16:32:11 瀏覽:192
大疆穩定器wifi連接初始密碼多少 發布:2025-01-11 16:25:36 瀏覽:890
專線伺服器運行的項目如何訪問 發布:2025-01-11 16:15:13 瀏覽:720
小米智能攝像機雲存儲 發布:2025-01-11 16:12:08 瀏覽:556