android第二部分-第17章service掌握Service定義及使用_第1頁
android第二部分-第17章service掌握Service定義及使用_第2頁
android第二部分-第17章service掌握Service定義及使用_第3頁
android第二部分-第17章service掌握Service定義及使用_第4頁
android第二部分-第17章service掌握Service定義及使用_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第13章Service本章目標(biāo)掌握Service與Activity的區(qū)別;掌握Service的定義及使用;可以使用ServiceConnection

接口綁定一個(gè)Service;了解系統(tǒng)提供的Service程序。認(rèn)識Service在Android系統(tǒng)開發(fā)之中,Services是一個(gè)重要的組成部分。如果現(xiàn)在某些程序需要中的部分操作是很消耗時(shí)間的,那么可以將這些程序定義在Service之中,這樣就可以完成程序的后臺運(yùn)行(也可以在不顯示界面的形式下運(yùn)行),即:Services實(shí)際上就相當(dāng)于是一個(gè)沒有圖形界面的Activity程序,而且當(dāng)用戶要執(zhí)行某些操作需要進(jìn)行跨進(jìn)程

的時(shí)候也可以使用Service來完成。Service的基本組成Service是一個(gè)沒有UI界面的操作組件,主要的功能是為Activity程序提供一些必要的支持,例如:

中的Mp3

,當(dāng)回到桌面上的時(shí)候這些組件依然可以運(yùn)行,實(shí)際上這些就屬于Service的功能,在開發(fā)時(shí)用戶只需要繼承自android.app.Service類就可以完成Service程序的開發(fā),在Service之中也有自己的生命周期方法。Service的生命周期控制方法No.方法及常量類型描述1public

static

final

intSTART_CONTINUATION_MASK常量繼續(xù)執(zhí)行Service2public

static

final

int

START_STICKY常量用于顯式的啟動(dòng)和停止Service3public IBinder

onBind(Intent

intent)普通設(shè)置Activity和Service之間的綁定4public

void

onCreate()普通當(dāng)一個(gè)Service創(chuàng)建時(shí)調(diào)用5public

int mand(Intent

intent,

int

flags,int

startId)普通啟動(dòng)Service,由startService()方法觸發(fā)6public

void

onDestroy()普通Service銷毀時(shí)調(diào)用,由stopService()方法觸發(fā)Activity類中操作Service的方法No.方法類型描述1publicComponentName

startService(Intentservice)普通啟動(dòng)一個(gè)Service2public

booleanstopService(Intent

name)普通停止一個(gè)Service3public

boolean

bindService(Intent

service,ServiceConnection

conn,

int

flags)普通與一個(gè)Service綁定4public

void

unbindService(ServiceConnectionconn)普通取消與一個(gè)Service的綁定范例:定義服務(wù)定義用戶的Service組件——MyServiceUtil.java//必須繼承Service//綁定Activityimport

android.app.Service;import

android.content.Intent;import

android.os.IBinder;public

class

MyServiceUtil

extends

Service

{@Overridepublic

IBinder

onBind(Intent

intent)

{returnnull;}@Overridepublic

void

onCreate()

{//創(chuàng)建時(shí)調(diào)用System.out.println("***

Service

onCreate()");}@Overridepublic

void

onDestroy(){

//銷毀時(shí)調(diào)用System.out.println("***

Service

onDestroy()");}//開始Service@Overridepublicint

mand(Intent

intent,

int

flags,

int

startId)

{System.out.println("***

Service

onStart()

-->

Intent

=

"

+

intent+"

,

startId

=

"+startId);return

Service.START_CONTINUATION_MASK

;

//繼續(xù)執(zhí)行Service}}范例:定義布局管理器<?xml

version="1.0"

encoding="utf-8"?><LinearLayoutxmlns:android="http://s→

定義線型布局管理器/apk/res/android"android:orientation="vertical"→所有組件垂直擺放android:layout_width="fill_parent"→布局管理器的寬度為屏幕寬度android:layout_height="fill_parent">→布局管理器的高度為屏幕高度<Button→定義按鈕組件android:id="@+id/start"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="啟動(dòng)Service"

/>→默認(rèn)顯示文字<Button→定義按鈕組件android:id="@+id/stop"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="停止Service"/>→默認(rèn)顯示文字</LinearLayout>范例:定義Activity程序,操作Service//定義按鈕//定義按鈕public

class

MyServiceDemo

extends

Activity

{private

Button

start;private

Button

stop;@Overridepublic

void

onCreate(Bundle

savedInstanceState){super.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.start

=

(Button)

super.findViewById(R.id.start);this.stop

=

(Button)

super.findViewById(R.id.stop);//調(diào)用布局文件//取得組件//取得組件this.start.setOnClickListener(new

StartOnClickListenerImpl())

;this.stop.setOnClickListener(new

StopOnClickListenerImpl())

;//單擊事件//單擊事件}//啟動(dòng)Service//停止Serviceprivate

class

StartOnClickListenerImpl

implements

OnClickListener

{@Overridepublic

void

onClick(View

v)

{MyServiceDemo.this.startService(new

Intent(MyServiceDemo.this,

MyServiceUtil.class));}}private

class

StopOnClickListenerImpl

implements

OnClickListener

{@Overridepublic

void

onClick(View

v)

{MyServiceDemo.this.stopService(new

Intent(MyServiceDemo.this,

MyServiceUtil.class));}}}配置Service一個(gè)Service程序編寫完成之后還需要在項(xiàng)目中,的AndroidManifest.xml文件之中進(jìn)行在<application>節(jié)點(diǎn)下添加如下的代碼:<service

android:name=".MyServiceUtil"

/>綁定Service當(dāng)一個(gè)Service啟動(dòng)之后,如果沒有出現(xiàn)意外以及明確的調(diào)用stopService()方法的話則將會一直駐留在

的服務(wù)之中,如果現(xiàn)在希望被一個(gè)Activity啟動(dòng)的Service可以在Activity程序結(jié)束后自動(dòng)結(jié)束,則可以將一個(gè)Activity和

Service進(jìn)行綁定,在Activity類中專門提供了一個(gè)用于綁定Service的bindService()方法,但是在此方法返回的是一個(gè)

android.content.ServiceConnection接口的參數(shù)ServiceConnection接口定義的方法No.方法類型描述1public void

onServiceConnected(ComponentName

name,

IBinder

service)普通當(dāng)與一個(gè)Service建立連接的時(shí)候調(diào)用2public

voidonServiceDisconnected(ComponentNamename)普通當(dāng)與一個(gè)Service取消連接的時(shí)候調(diào)用IBinder接口ServiceConnection接口主要的功能是當(dāng)一個(gè)Activity程序與Service建立連接之后,可以通過ServiceConnection接口執(zhí)行Service連接(或取消)連接的處理操作,在Activity連接到Service程序上之后,會觸發(fā)Service類中的onBind()方法,在此方法中要返回一個(gè)android.os.IBinder接口的對象。IBinder接口的常量和方法No.常量及方法類型描述1public

static

final

int

DUMP_TRANSACTION常量IBinder協(xié)議的事務(wù)碼:清除 狀態(tài)2public

static

final

int

_CALL_TRANSACTION常量用戶指令的第一個(gè)事務(wù)碼可用3publicstatic

final

int

FLAG_ONEWAY常量transact()方法單向調(diào)用的標(biāo)志位,表示調(diào)用者不會等待從被調(diào)用者那里返回的結(jié)果,而立即返回4publicstatic

final

int

INTERFACE_TRANSACTION常量IBinder協(xié)議的事務(wù)碼:向事務(wù)接收端詢問其完整的接口規(guī)范5public

static

final

int

LAST_CALL_TRANSACTION常量用戶指令的最后一個(gè)事務(wù)碼可用6public

static

final

int

_TRANSACTION常量IBinder協(xié)議的事務(wù)碼:

Binder()7public void

dump(FileDescriptorfd,

String[]

args)方法向指定的數(shù)據(jù)流輸出對象狀態(tài)8public String

getInterfaceDescriptor()方法取得被Binder對象所支持的接口名稱9public boolean

isBinderAlive()方法檢查Binder所在的進(jìn)程是否活著10public void

linkToDeath(IBinder.DeathRecipient

recipient,

intflags)方法如果指定的Binder

,則為通知 一個(gè)新的11public

boolean

Binder()方法檢查 對象是否存在12public IInterface

queryLocalInterface(String

descriptor)方法取得對一個(gè)接口綁定對象本地實(shí)現(xiàn)13public booleantransact(int

code,

Parcel

data,

Parcel

reply,

intflags)方法執(zhí)行一個(gè)一般的操作14public boolean

unlinkToDeath(IBinder.DeathRecipientrecipient,

int

flags)方法刪除一個(gè)接收通知的范例:定義Service類——MyService.java//必須繼承Servicepublic

class

MyServiceUtil

extends

Service

{private

IBinder

myBinder

=

new

Binder(){@Overridepublic

String

getInterfaceDescriptor(){//取得接口描述信息return

"MyService

class.";//返回Service類的名稱}}

;//綁定時(shí)觸發(fā)@Overridepublic

IBinder

onBind(Intent

intent){System.out.println("***

Service

onBind()

Intent

=

"

+

intent)

;return

myBinder;

}@Override//重新綁定時(shí)觸發(fā)public

void

onRebind(Intent

intent)

{System.out.println("***Service

onRebind()

Intent

=

"

+intent);super.onRebind(intent);

}@Overridepublic

boolean

onUnbind(Intent

intent){

//解除綁定時(shí)觸發(fā)System.out.println("***

Service

onUnbind()

Intent

=

"+

intent);}return

super.onUnbind(intent);@Overridepublic

void

onCreate()

{//創(chuàng)建時(shí)觸發(fā)System.out.println("***

Service

onCreate()");}super.onCreate();@Overridepublic

void

onDestroy()

{//銷毀時(shí)觸發(fā)System.out.println("***

Service

onDestroy()");super.onDestroy();}@Overridepublic

intmand(Intent

intent,

int

flags,

int

startId)

{//啟動(dòng)時(shí)觸發(fā)System.out.println("***

Servicemand()

Intent

=

"

+

intent);return

Service.START_CONTINUATION_MASK;}}定義布局管理器——main.xml<?xml

version="1.0"

encoding="utf-8"?><LinearLayout→線型布局xmlns:android="http://s

/apk/res/android"android:orientation="vertical"→所有組件垂直擺放android:layout_width="fill_parent"→布局管理器的寬度為屏幕寬度android:layout_height="fill_parent">→布局管理器的高度為屏幕高度<Button→按鈕組件android:id="@+id/start"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="啟動(dòng)Service"/>→默認(rèn)顯示文字<Button→按鈕組件android:id="@+id/stop"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="停止Service"/>→默認(rèn)顯示文字<Button→按鈕組件android:id="@+id/bind"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="綁定Service"/>→默認(rèn)顯示文字<Button→按鈕組件android:id="@+id/unbind"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="解除綁定Service"/>→默認(rèn)顯示文字</LinearLayout>定義Activity程序,操作Servicepublic

class

MyServiceDemo

extends

Activity

{//定義按鈕//定義按鈕//定義按鈕private

Button

start;private

Button

stop;private

Button

bind;private

Button

unbind;//定義按鈕private

ServiceConnection

serviceConnection

=

new

ServiceConnection(){@Overridepublic

void

onServiceConnected(ComponentName

name,try

{IBinder

service){

//連接到ServiceSystem.out.println("###

Service

Connect

Success.

service

=

"+

service.getInterfaceDescriptor());}

catch

(RemoteException

e)

{e.printStackTrace();}}@Overridepublic

void

onServiceDisconnected(ComponentName

name){//與Service斷開連接System.out.println("###

Service

Connect

Failure.");}};定義Activity程序,操作Service//調(diào)用布局文件//取得組件//取得組件//取得組件@Overridepublic

void

onCreate(Bundle

savedInstanceState){super.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.start

=

(Button)

super.findViewById(R.id.start);this.stop

=

(Button)

super.findViewById(R.id.stop);this.bind

=

(Button)

super.findViewById(R.id.bind);this.unbind

=

(Button)

super.findViewById(R.id.unbind);//取得組件this.start.setOnClickListener(new

StartOnClickListenerImpl())

;this.stop.setOnClickListener(new

StopOnClickListenerImpl())

;this.bind.setOnClickListener(new

BindOnClickListenerImpl())

;this.unbind.setOnClickListener(new

UnbindOnClickListenerImpl())

;//單擊事件//單擊事件//單擊事件//單擊事件}private

class

StartOnClickListenerImpl

implements

OnClickListener

{@Overridepublic

void

onClick(View

v)

{MyServiceDemo.this.startService(new

Intent(MyServiceDemo.this,MyServiceUtil.class));//啟動(dòng)Service}}private

class

StopOnClickListenerImpl

implements

OnClickListener

{@Overridepublic

void

onClick(View

v)

{MyServiceDemo.this.stopService(new

Intent(MyServiceDemo.this,MyServiceUtil.class));//停止Service}}定義Activity程序,操作Serviceprivate

class

BindOnClickListenerImpl

implements

OnClickListener

{@Overridepublic

void

onClick(View

v)

{MyServiceDemo.this.bindService(new

Intent(MyServiceDemo.this,MyServiceUtil.class),MyServiceDemo.this.serviceConnection,Context.BIND_AUTO_CREATE);

//綁定Servic}}private

class

UnbindOnClickListenerImpl

implements

OnClickListener

{@Overridepublic

void

onClick(View

v)

{MyServiceDemo.this.unbindService(MyServiceDemo.this.serviceConnection);//取消Service綁定}}}范例:解決but如果現(xiàn)在沒有服務(wù)與Activity進(jìn)行綁定而又調(diào)用了解除綁定操作,則會出現(xiàn)錯(cuò)誤,所以在解除綁定之前必須要增加一個(gè)判斷,即:判斷一個(gè)

Activity是否和一個(gè)Service綁定在了一起,如果綁定在了一起才可以使用unbindService()方法解除綁定。一般的做法是定義一個(gè)標(biāo)記性的操作接口,而后在Activity中判斷此接口對象是否為null來決定是否綁定了Service,這樣說比較抽象,下面通過一個(gè)實(shí)際的代碼來觀察,本程序?yàn)榱朔奖?,只提供了綁定服?wù)與解除綁定兩個(gè)操作。范例:定義布局管理器——main.xml<?xml

version="1.0"

encoding="utf-8"?><LinearLayout→線型布局xmlns:android="http://s

/apk/res/android"android:orientation="vertical"→所有組件垂直擺放android:layout_width="fill_parent"→布局管理器的寬度為屏幕寬度android:layout_height="fill_parent">→布局管理器的高度為屏幕高度<Button→按鈕組件android:id="@+id/bind"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="綁定Service"/>→默認(rèn)顯示文字<Button→按鈕組件android:id="@+id/unbind"→組件ID,程序中使用android:layout_width="fill_parent"→組件寬度為屏幕寬度android:layout_height="wrap_content"→組件高度為文字高度android:text="解除綁定Service"/>→默認(rèn)顯示文字</LinearLayout>范例:定義標(biāo)記性接口——IServicepublic

interface

IService

{}范例:定義服務(wù)類——MyServiceUtil//必須繼承Service定義IBinderimport

android.app.Service;import

android.content.Intent;import

android.os.Binder;import

android.os.IBinder;public

class

MyServiceUtil

extends

Service

{

private

IBinder

myBinder

=

new

BinderImpl();

//@Overridepublic

IBinder

onBind(Intent

intent)

{//綁定時(shí)觸發(fā)System.out.println("***

Service

onBind()

Intent

=

"

+

intent)

;return

myBinder;}//取得接口描述信息//返回Service類的名稱class

BinderImpl

extends

Binder

implements

IService

{@Overridepublic

String

getInterfaceDescriptor()

{return

"MyService

class.";}}}定義Activity程序,綁定服務(wù)//定義按鈕public

class

MyServiceDemo

extends

Activity

{private

Button

bind;private

Button

unbind;//定義按鈕private

ServiceConnection

serviceConnection

=

new

ServiceConnectionImpl();private

IService

service

=

null

;@Overridepublic

void

onCreate(Bundle

savedInstanceState)

{super.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.bind

=

(Button)

super.findViewById(R.id.bind);//調(diào)用布局文件//取得組件this.unbind

=

(Button)

super.findViewById(R.id.unbind);

//

取得組件this.bind.setOnClickListener(new

BindOnClickListenerImpl())

;

//單擊事件this.unbind.setOnClickListener(new

UnbindOnClickListenerImpl())

;

//單擊事件}private

class

BindOnClickListenerImpl

implements

OnClickListener

{@Overridepublic

void

onClick(View

v)

{MyServiceDemo.this.bindService(new

Intent(MyServiceDemo.this,MyServiceUtil.class),MyServiceDemo.this.serviceConnection,Context.BIND_AUTO_CREATE);//綁定Service}}private

class

UnbindOnClickListenerImpl

implements

OnClickListener

{@Overridepublic

void

onClick(View

v)

{if(MyServiceDemo.this.service

!=

null){MyServiceDemo.this.unbindService(MyServiceDemo.this.serviceConnection);MyServiceDemo.this.service

=null

;//清空標(biāo)記}}}private

class

ServiceConnectionImpl

implements

ServiceConnection

{@Overridepublic

voidonServiceConnected(ComponentNamename,IBinderservice){//連接到ServiceMyServiceDemo.this.service

=(BinderImpl)service;//取得IService接口對象}@Overridepublic

void

onServiceDisconnected(ComponentName

name){//與Service斷開連接}}}Context類中定義的系統(tǒng)服務(wù)No.常量類型描述1public

static

final

String

CLIPBOARD_SERVICE常量剪貼板服務(wù)2public

static

final

String

WINDOW_SERVICE常量窗口服務(wù)3public

static

final

String

ALARM_SERVICE常量鬧鈴服務(wù)4public

static

finalString

AUDIO_SERVICE常量音頻服務(wù)5public

static

final

String

NOTIFICATION_SERVICE常量Notification服務(wù)6public

static

final

String

SEARCH_SERVICE常量搜索服務(wù)7public

static

finalString

POWER_SERVICE常量電源管理服務(wù)8public

static

finalString

WIFI_SERVICE常量WIFI服務(wù)9public

static

final

String

ACTIVITY_SERVICE常量運(yùn)行程序服務(wù)范例:剪貼板服務(wù)范例:定義布局管理器——main.xml線型布局管理器<?xml

version="1.0"

encoding="utf-8"?><LinearLayoutxmlns:android="http://sandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><EditTextandroid:layout_width="fill_parent"→/apk/res/android"→→→→→android:layout_height="wrap_content"

/>

→所有組件垂直擺放布局管理器的寬度為屏幕寬度布局管理器的高度為屏幕高度文本輸入框組件寬度為屏幕寬度組件高度為文字高度</LinearLayout>范例:定義Activity程序,操作剪貼板public

class

MyClipboardDemo

extends

Activity

{@Overridepublic

void

onCreate(Bundle

savedInstanceState)

{super.onCreate(savedInstanceState);super.setContentView(R.layout.main);//設(shè)置布局管理器ClipboardManager

clipboardManager

=

(ClipboardManager)super.getSystemService(Context.CLIPBOARD_SERVICE);

//取得剪貼板clipboardManager.setText(“jereh");//設(shè)置剪貼板中的內(nèi)容}}范例:取得正在運(yùn)行的Activity程序信息ActivityManagerAndroid

由于采用了多任務(wù)的設(shè)計(jì),所以可以同時(shí)運(yùn)行多個(gè)Activity程序,而用戶如果要想取得這些Activity程序的信息,就可以通過

“ACTIVITY_SERVICE”服務(wù)取得所有運(yùn)行的程序,但是此時(shí)通過

super.getSystemService()方法取得的服務(wù)對象的類型為“android.app.ActivityManager”。ActivityManager類的常用方法No.方法類型描述1publicList<ActivityManager.RunningAppProcessInfo>

getRunningAppProcesses()普通取得所有的正在運(yùn)行的進(jìn)程信息2publicList<ActivityManager.RunningServiceInfo>

getRunningServices(int

maxNum)普通取得指定個(gè)數(shù)的服務(wù)信息3publicList<ActivityManager.RunningTaskInfo>getRunningTasks(int

maxNum)普通取得指定個(gè)數(shù)的任務(wù)信息4public

void

killBackgroundProcesses

(StringpackageName)普通銷毀一個(gè) 進(jìn)程,必須設(shè)置“KILL_BACKGROUND_PROCESSES”權(quán)限5public

ConfigurationInfogetDeviceConfigurationInfo()普通取得設(shè)備的配置信息ActivityManager類取得任務(wù)信息當(dāng)使用ActivityManager類取得任務(wù)信息的時(shí)候有三個(gè)方法:getRunningTasks()返回List<ActivityManager.RunningTaskInfo>對象;getRunningServices()返回List<ActivityManager.RunningServiceInfo>對象;getRunningAppProcesses()返回List<ActivityManager.RunningAppProcessInfo>對象;ActivityManager.RunningTaskInfo類的常用屬性No.屬性類型描述1public

ComponentName

baseActivity屬性取得程序運(yùn)行開始的Activity2public

CharSequence

description屬性取得該Activity的描述信息3public

int

id屬性取得任務(wù)的唯一ID4public

int

numActivities屬性取得所有運(yùn)行的Activity數(shù)量,包括已經(jīng)停止的5public

int

numRunning屬性取得所有運(yùn)行的Activity數(shù)量,不包含已停止的6public

Bitmap

thumbnail屬性取得任務(wù)的圖標(biāo)7publicComponentNametopActivity屬性取得當(dāng)前用戶正在操作的Activity信息范例:定義布局管理器——main.xml→

線性布局管理器/apk/res/android"<?xml

version="1.0"

encoding="utf-8"?><LinearLayoutxmlns:android="http://s

android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><ListViewandroid:id="@+id/tasklist"android:layout_width="fill_parent"→→→→→→→所有組件垂直擺放布局管理器寬度為屏幕寬度布局管理器高度為屏幕高度定義ListView組件組件ID,程序中使用組件寬度為屏幕寬度組加高度為內(nèi)容高度android:layout_height="wrap_content"

/></LinearLayout>定義Activity程序,列表顯示所有運(yùn)行的Activity程序public

class

MyActivityRunDemo

extends

Activity

{private

ActivityManager

activityManager

=

null;istAdapter

adapter

=

null;//ActivityManager對象//適配器組件privaprivaprivaist<String>all

=new

ArrayList<String>();//保存信息istView

tasklist

=

null;//ListView組件//默認(rèn)布局管理器List<ActivityManager.RunningTaskInfo>

allTaskInfo;//所有任務(wù)信息@Overridepublic

void

onCreate(Bundle

savedInstanceState)

{super.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.tasklist

=(ListView)super.findViewById(R.id.tasklist);//取得組件this.activityManager

=

(ActivityManager)

super.getSystemService(Context.ACTIVITY_SERVICE);//取得運(yùn)行的服務(wù)this.listActivity();}public

void

listActivity()

{this.allTaskInfo

=this.activityManager.getRunningTasks(30);//取回30筆任務(wù)數(shù)量Iterator<ActivityManager.RunningTaskInfo>

iterInfo=allTaskInfo.iterator();//實(shí)例化Iterator對象//迭代輸出//取出每一個(gè)對象while

(iterInfo.hasNext())

{ActivityManager.RunningTaskInfo

task

=

iterInfo.next();this.all.add("【ID="+task.id+"】"+

task.baseActivity.getClassName());//追加數(shù)據(jù)}this.adapter

=new

ArrayAdapter<String>(this,

//實(shí)例化ArrayAdapter//定義布局文件android.R.layout.simple_list_item_1,MyActivityRunDemo.this.all);//定義顯示數(shù)據(jù)this.tasklist.setAdapter(MyActivityRunDemo.this.adapter);//設(shè)置數(shù)據(jù)}}范例:取得正在運(yùn)行的服務(wù)ActivityManager.RunningServiceInfo類的常用屬性No.屬性類型描述1public

long

activeSince屬性服務(wù)從啟動(dòng)到現(xiàn)在所運(yùn)行的時(shí)間2public

int

clientCount屬性返回連接到此服務(wù)的客戶端數(shù)量3public

int

crashCount屬性返回該服務(wù)在運(yùn)行中的死機(jī)次數(shù)4public

boolean

foreground屬性如果為true則表示服務(wù)在 運(yùn)行5public

long

lastActivityTime屬性最后一個(gè)Activity與服務(wù)的綁定時(shí)間6public

int

pid屬性服務(wù)的ID,如果不是0則表示正在運(yùn)行7public

String

process屬性取得服務(wù)的名稱8public

long

restarting屬性如果不為0,則表示不是運(yùn)行中的服務(wù),預(yù)計(jì)會在指定的時(shí)間內(nèi)啟動(dòng)9public

ComponentName

service屬性取得服務(wù)的組件對象10public

boolean

started屬性若服務(wù)正在運(yùn)行則此值為true11public

int

uid屬性此服務(wù)的UID定義Activity程序,顯示所有的服務(wù)public

class

MyActivityRunDemo

extends

Activity

{private

ActivityManager

activityManager

=null;

//ActivityManager對象istAdapter

adapter

=

null;//適配器組件privaprivaprivaist<String>all

=new

ArrayList<String>();//保存信息istView

tasklist

=

null;//ListView組件//所有任務(wù)信息List<ActivityManager.RunningServiceInfo>

allServices;@Overridepublic

void

onCreate(Bundle

savedInstanceState){super.onCreate(savedInstanceState);super.setContentView(R.layout.main);//默認(rèn)布局管理器//取得運(yùn)行的服務(wù)this.tasklist

=(ListView)super.findViewById(R.id.tasklist);//取得組件this.activityManager

=

(ActivityManager)

super.getSystemService(Context.ACTIVITY_SERVICE);this.listActivity();}public

void

listActivity()

{this.allServices

=this.activityManager.getRunningServices(30);//30筆任務(wù)數(shù)量Iterator<ActivityManager.RunningServiceInfo>

iterInfo

=

allServices.iterator();//實(shí)例化Iterator對象while

(iterInfo.hasNext()){

//迭代輸出ActivityManager.RunningServiceInfo

service

=

iterInfo.next();this.all.add("【ID="+service.pid

+"】"+cess);//每一個(gè)對象//追加數(shù)據(jù)}this.adapter

=new

ArrayAdapter<String>(this,

//實(shí)例化ArrayAdapterandroid.R.layout.simple_list_item_1,MyActivityRunDemo.this.all);//定義布局文件//定義顯示數(shù)據(jù)this.tasklist.setAdapter(MyActivityRunDemo.this.adapter);//設(shè)置數(shù)據(jù)}}范例:取得全部運(yùn)行的進(jìn)程ActivityManager.RunningAppProcessInfo類的常用屬性No.屬性類型描述1public

int

importance屬性取得進(jìn)程的重要性代碼2public

int

importanceReasonCode屬性取得進(jìn)程的重要性原因代碼3public

ComponentName

i

ponent屬性取得進(jìn)程重要性原因的客戶端組件4public

int

importanceReasonPid屬性取得進(jìn)程重要性原因的客戶端進(jìn)程ID,如果是0則表示沒有客戶端使用此進(jìn)程5public

int

pid屬性取得進(jìn)程的PID6public

String[]

pkgList屬性取得所有已經(jīng)加載到進(jìn)程的程序包7public

String

processName屬性取得進(jìn)程的名稱8public

static

final

int

IMPORTANCE_BACKGROUND常量進(jìn)程重要性代碼:表示在 運(yùn)行9public

static

final

int

IMPORTANCE_EMPTY常量進(jìn)程重要性代碼:沒有程序執(zhí)行此進(jìn)程10public

static

final

int

IMPORTANCE_FOREGROUND常量進(jìn)程重要性代碼:此進(jìn)程運(yùn)行

臺UI11public

static

final

int

IMPORTANCE_PERCEPTIBLE常量進(jìn)程重要性代碼:此進(jìn)程正在運(yùn)行12public

static

final

int

IMPORTANCE_SERVICE常量進(jìn)程重要性代碼:此進(jìn)程是繼續(xù)保持運(yùn)行的服務(wù)13public

static

final

int

IMPORTANCE_VISIBLE常量進(jìn)程重要性代碼:這個(gè)線程還沒有運(yùn)行 臺,但是正準(zhǔn)備 臺運(yùn)行定義Activity程序,取得所有的進(jìn)程信息public

class

MyActivityRunDemo

extends

Activity

{private

ActivityManager

activityManager

=null;

//ActivityManager對象istAdapter

adapter

=

null;//適配器組件privaprivaprivaist<String>all

=new

ArrayList<String>();//保存信息istView

tasklist

=

null;//ListView組件//默認(rèn)布局管理器List<ActivityManager.RunningAppProcessInfo>

allApp;//所有任務(wù)信息@Overridepublic

void

onCreate(Bundle

savedInstanceState){super.onCreate(savedInstanceState);super.setContentView(R.layout.main);this.tasklist

=(ListView)super.findViewById(R.id.tasklist);//取得組件this.activityManager

=

(ActivityManager)

super.getSystemService(Context.ACTIVITY_SERVICE);//取得運(yùn)行的服務(wù)this.listActivity();}public

void

listActivity()

{this.allApp

=this.activityManager.getRunningAppProcesses();//取回任務(wù)Iterator<ActivityManager.RunningAppProcessInfo>

iterInfo

=

allApp.iterator();//實(shí)例化Iterator對象while

(iterInfo.hasNext())

{//迭代輸出ActivityManager.RunningAppProcessInfo

app=iterInfo.next();//每一個(gè)對象this.all.add("【ID=

"

+

app.pid

+"

"

+

cessName);

//

追加數(shù)據(jù)}this.adapter

=new

ArrayAdapter<String>(this,

//實(shí)例化ArrayAdapterandroid.R.layout.simple_list_item_1,MyActivityRunDemo.this.all);//定義布局文件//定義顯示數(shù)據(jù)this.tasklist.setAdapter(MyActivityRunDemo.this.adapter);//設(shè)置數(shù)據(jù)}}范例:取得網(wǎng)絡(luò)信息ephonyManager的常用常量及方法No.常量及方法類型描述1public

static

final

int

NETWORK_TYPE_CDMA常量使用CDMA網(wǎng)絡(luò)2public

static

final

int

NETWORK_TYPE_GPRS常量使用GPRS網(wǎng)絡(luò)3public

static

final

int

PHONE_TYPE_CDMA常量使用CDMA通訊4public

static

final

int

PHONE_TYPE_GSM常量使用GSM通訊5public

String

getLine1Number()普通取得

號碼6public

String

getNetworkOperatorName()普通取得移動(dòng)提供商的名稱7public

int

getNetworkType()普通取得移動(dòng)網(wǎng)絡(luò)的連接類型8public

intgetPhoneType()普通取得

網(wǎng)絡(luò)類型9public

boolean

isNetworkRoaming()普通判斷 是否處于漫游狀態(tài)10public

void

listen(PhoneSta istener

listener,

int

events)普通狀態(tài)

器范例:定義布局管理器——main.xml→

線性布局管理器/apk/res/android"→→→→<?xml

version="1.0"

encoding="utf-8"?><LinearLayoutxmlns:android="http://sandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><ListViewandroid:id="@+id/infolist"android:layout_width="fill_parent"android:layout_height="wrap_content"

/>

→所有組件垂直擺放布局管理器寬度為屏幕寬度→

布局管理器高度為屏幕高度ListView組件組件ID,程序中使用→

組件寬度為屏幕寬度組件高度為自身內(nèi)容高度</LinearLayout>定義Activity程序,顯示網(wǎng)絡(luò)信息(A)public

class

MyephoneManagerDemo

extends

Activity

{istView

infolist

=

null;//ListView列表ephonyManager

manager

=

null;//

管理器istAdapter

adapter

=null;

//適配器組件privaprivateprivaprivaist<String>

all

=new

ArrayList<String>();//保存信息@Overridepublic

void

onCreate(Bundle

savedInstanceState)

{super.onCreate(savedInstanceState);super.setContentView(R.layout.main);list

=

(ListView)

super.findViewById(R.list);//調(diào)用布局管理器//取得組件this.manager

=

( ephonyManager)

super.getSystemService(Context.

EPHONY_SERVICE);//取得服務(wù)this.list();//列表顯示}定義Activity程序,顯示網(wǎng)絡(luò)信息(B)private

void

list(){

//執(zhí)行列表顯示操作號碼"

:

"

號碼:"http://取得 號碼this.all.add(this.manager.getLine1Number()==null

?"沒有+

this.manager.getLine1Number());this.all.add(this.manager.getNetworkOperatorName()

==

null

?"沒有移動(dòng)服務(wù)商":"移動(dòng)服務(wù)商:"+this.manager.getNetworkOperatorName());//取得移動(dòng)商名稱if

(this.manager.getPhoneType()== ephonyManager.NETWORK_TYPE_CDMA){//判斷網(wǎng)絡(luò)類型this.all.add("移動(dòng)網(wǎng)絡(luò):CDMA");ephonyManager.NETWORK_TYPE_GPRS)

{}

else

if

(this.manager.getPhoneType()

==this.all.add("移動(dòng)網(wǎng)絡(luò):GPRS");}

else{this.all.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論