




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
AndroidService生命周期及用法!
\o"收藏到我的網(wǎng)摘中,并分享給我的朋友"收藏大家好,上一節(jié)我講解了AndroidActivity的生命周期,這一節(jié)我將講解一下Service,首先我們要知道Service具體是干什么的,什么時(shí)候用到?以及它的生命周期等。Service概念及用途:Android中的服務(wù),它與Activity不同,它是不能與用戶交互的,不能自己?jiǎn)?dòng)的,運(yùn)行在后臺(tái)的程序,如果我們退出應(yīng)用時(shí),Service進(jìn)程并沒有結(jié)束,它仍然在后臺(tái)運(yùn)行,那我們什么時(shí)候會(huì)用到Service呢?比如我們播放音樂的時(shí)候,有可能想邊聽音樂邊干些其他事情,當(dāng)我們退出播放音樂的應(yīng)用,如果不用Service,我們就聽不到歌了,所以這時(shí)候就得用到Service了,又比如當(dāng)我們一個(gè)應(yīng)用的數(shù)據(jù)是通過網(wǎng)絡(luò)獲取的,不同時(shí)間(一段時(shí)間)的數(shù)據(jù)是不同的這時(shí)候我們可以用Service在后臺(tái)定時(shí)更新,而不用每打開應(yīng)用的時(shí)候在去獲取。Service生命周期
:AndroidService的生命周期并不像Activity那么復(fù)雜,它只繼承了onCreate(),onStart(),onDestroy()三個(gè)方法,當(dāng)我們第一次啟動(dòng)Service時(shí),先后調(diào)用了onCreate(),onStart()這兩個(gè)方法,當(dāng)停止Service時(shí),則執(zhí)行onDestroy()方法,這里需要注意的是,如果Service已經(jīng)啟動(dòng)了,當(dāng)我們?cè)俅螁?dòng)Service時(shí),不會(huì)在執(zhí)行onCreate()方法,而是直接執(zhí)行onStart()方法,具體的可以看下面的實(shí)例。Service與Activity通信:Service后端的數(shù)據(jù)最終還是要呈現(xiàn)在前端Activity之上的,因?yàn)閱?dòng)Service時(shí),系統(tǒng)會(huì)重新開啟一個(gè)新的進(jìn)程,這就涉及到不同進(jìn)程間通信的問題了(AIDL)這一節(jié)我不作過多描述,當(dāng)我們想獲取啟動(dòng)的Service實(shí)例時(shí),我們可以用到bindService和onBindService方法,它們分別執(zhí)行了Service中IBinder()和onUnbind()方法。為了讓大家更容易理解,我寫了一個(gè)簡(jiǎn)單的Demo,大家可以模仿著我,一步一步的來。第一步:新建一個(gè)Android工程,我這里命名為ServiceDemo.第二步:修改main.xml代碼,我這里增加了四個(gè)按鈕,代碼如下:viewplaincopytoclipboardprint?<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button
android:id="@+id/startservice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="startService"
/>
<Button
android:id="@+id/stopservice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="stopService"
/>
<Button
android:id="@+id/bindservice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="bindService"
/>
<Button
android:id="@+id/unbindservice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="unbindService"
/>
</LinearLayout>
第三步:新建一個(gè)Service,命名為MyService.java代碼如下:viewplaincopytoclipboardprint?package
com.tutor.servicedemo;
import
android.app.Service;
import
android.content.Intent;
import
android.os.Binder;
import
android.os.IBinder;
import
android.text.format.Time;
import
android.util.Log;
public
class
MyService
extends
Service
{
//定義個(gè)一個(gè)Tag標(biāo)簽
private
static
final
String
TAG
=
"MyService";
//這里定義吧一個(gè)Binder類,用在onBind()有方法里,這樣Activity那邊可以獲取到
private
MyBinder
mBinder
=
new
MyBinder();
@Override
public
IBinder
onBind(Intent
intent)
{
Log.e(TAG,
"start
IBinder~~~");
return
mBinder;
}
@Override
public
void
onCreate()
{
Log.e(TAG,
"start
onCreate~~~");
super.onCreate();
}
@Override
public
void
onStart(Intent
intent,
int
startId)
{
Log.e(TAG,
"start
onStart~~~");
super.onStart(intent,
startId);
}
@Override
public
void
onDestroy()
{
Log.e(TAG,
"start
onDestroy~~~");
super.onDestroy();
}
@Override
public
boolean
onUnbind(Intent
intent)
{
Log.e(TAG,
"start
onUnbind~~~");
return
super.onUnbind(intent);
}
//這里我寫了一個(gè)獲取當(dāng)前時(shí)間的函數(shù),不過沒有格式化就先這么著吧
public
String
getSystemTime(){
Time
t
=
new
Time();
t.setToNow();
return
t.toString();
}
public
class
MyBinder
extends
Binder{
MyService
getService()
{
return
MyService.this;
}
}
}
第四步:修改ServiceDemo.java,代碼如下:viewplaincopytoclipboardprint?package
com.tutor.servicedemo;
import
android.app.Activity;
import
android.content.ComponentName;
import
android.content.Context;
import
android.content.Intent;
import
android.content.ServiceConnection;
import
android.os.Bundle;
import
android.os.IBinder;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.TextView;
public
class
ServiceDemo
extends
Activity
implements
OnClickListener{
private
MyService
mMyService;
private
TextView
mTextView;
private
Button
startServiceButton;
private
Button
stopServiceButton;
private
Button
bindServiceButton;
private
Button
unbindServiceButton;
private
Context
mContext;
//這里需要用到ServiceConnection在Context.bindService和context.unBindService()里用到
private
ServiceConnection
mServiceConnection
=
new
ServiceConnection()
{
//當(dāng)我bindService時(shí),讓TextView顯示MyService里getSystemTime()方法的返回值
public
void
onServiceConnected(ComponentName
name,
IBinder
service)
{
//
TODO
Auto-generated
method
stub
mMyService
=
((MyService.MyBinder)service).getService();
mTextView.setText("I
am
frome
Service
:"
+
mMyService.getSystemTime());
}
public
void
onServiceDisconnected(ComponentName
name)
{
//
TODO
Auto-generated
method
stub
}
};
public
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}
public
void
setupViews(){
mContext
=
ServiceDemo.this;
mTextView
=
(TextView)findViewById(R.id.text);
startServiceButton
=
(Button)findViewById(R.id.startservice);
stopServiceButton
=
(Button)findViewById(R.id.stopservice);
bindServiceButton
=
(Button)findViewById(R.id.bindservice);
unbindServiceButton
=
(Button)findViewById(R.id.unbindservice);
startServiceButton.setOnClickListener(this);
stopServiceButton.setOnClickListener(this);
bindServiceButton.setOnClickListener(this);
unbindServiceButton.setOnClickListener(this);
}
public
void
onClick(View
v)
{
//
TODO
Auto-generated
method
stub
if(v
==
startServiceButton){
Intent
i
=
new
Intent();
i.setClass(ServiceDemo.this,
MyService.class);
mContext.startService(i);
}else
if(v
==
stopServiceButton){
Intent
i
=
new
Intent();
i.setClass(ServiceDemo.this,
MyService.class);
mContext.stopService(i);
}else
if(v
==
bindServiceButton){
Intent
i
=
new
Intent();
i.setClass(ServiceDemo.this,
MyService.class);
mContext.bindService(i,
mServiceConnection,
BIND_AUTO_CREATE);
}else{
mContext.unbindService(mServiceConnection);
}
}
}
第五步:修改AndroidManifest.xml代碼(將我們新建的MyService注冊(cè)進(jìn)去如下代碼第14行:)
viewplaincopytoclipboardprint?<?xml
version="1.0"
encoding="utf-8"?>
<manifest
xmlns:android="/apk/res/android"
package="com.tutor.servicedemo"
android:versionCode="1"
android:versionName="1.0">
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".ServiceDemo"
android:label="
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)水煤漿罐式集裝箱行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年中國(guó)半自動(dòng)廢紙壓縮機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年中國(guó)丙烯酸泡棉雙面膠帶行業(yè)投資前景及策略咨詢研究報(bào)告
- 云南省昆明市海口中學(xué)2025屆高二下化學(xué)期末聯(lián)考模擬試題含解析
- 大二c程序設(shè)計(jì)考試題及答案
- 初中外語考試題庫及答案
- 茶葉企業(yè)筆試考試題目及答案
- 寶雞一中招考試題及答案
- 2025屆四川省成都市成都市樹德中學(xué)化學(xué)高一下期末達(dá)標(biāo)檢測(cè)模擬試題含解析
- 2025年金融機(jī)構(gòu)數(shù)字化轉(zhuǎn)型中的信用風(fēng)險(xiǎn)數(shù)字化管理策略報(bào)告
- NBT 47013.4-2015 承壓設(shè)備無損檢測(cè) 第4部分:磁粉檢測(cè)
- 湖北2024年湖北省高級(jí)人民法院及直屬法院招聘雇員制審判輔助人員22人筆試歷年典型考題及考點(diǎn)附答案解析
- 2024年上海市中考數(shù)學(xué)真題試卷及答案解析
- 生物-云南省昆明市2023-2024學(xué)年高二下學(xué)期期末質(zhì)量檢測(cè)試題和答案
- 跨境電商海外倉租賃協(xié)議
- 《污水處理企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化建設(shè)規(guī)范》(T-GDPAWS 11-2022)
- 繪畫基礎(chǔ)(師范教育專業(yè)繪畫的基礎(chǔ)知識(shí)和創(chuàng)作方法)全套教學(xué)課件
- 湖南省長(zhǎng)沙市2024年七年級(jí)下學(xué)期數(shù)學(xué)期末考試試卷附答案
- 2023年中國(guó)美術(shù)學(xué)院輔導(dǎo)員真題
- 2024年江西石城縣城投集團(tuán)與贛江源農(nóng)業(yè)發(fā)展有限公司招聘筆試參考題庫含答案解析
- 《經(jīng)濟(jì)學(xué)基礎(chǔ)》課后題答案
評(píng)論
0/150
提交評(píng)論