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页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第13章Service本章目标掌握Service与Activity的区别;掌握Service的定义及使用;可以使用ServiceConnection

接口绑定一个Service;了解系统提供的Service程序。认识Service在Android系统开发之中,Services是一个重要的组成部分。如果现在某些程序需要中的部分操作是很消耗时间的,那么可以将这些程序定义在Service之中,这样就可以完成程序的后台运行(也可以在不显示界面的形式下运行),即:Services实际上就相当于是一个没有图形界面的Activity程序,而且当用户要执行某些操作需要进行跨进程

的时候也可以使用Service来完成。Service的基本组成Service是一个没有UI界面的操作组件,主要的功能是为Activity程序提供一些必要的支持,例如:

中的Mp3

,当回到桌面上的时候这些组件依然可以运行,实际上这些就属于Service的功能,在开发时用户只需要继承自android.app.Service类就可以完成Service程序的开发,在Service之中也有自己的生命周期方法。Service的生命周期控制方法No.方法及常量类型描述1public

static

final

intSTART_CONTINUATION_MASK常量继续执行Service2public

static

final

int

START_STICKY常量用于显式的启动和停止Service3public IBinder

onBind(Intent

intent)普通设置Activity和Service之间的绑定4public

void

onCreate()普通当一个Service创建时调用5public

int mand(Intent

intent,

int

flags,int

startId)普通启动Service,由startService()方法触发6public

void

onDestroy()普通Service销毁时调用,由stopService()方法触发Activity类中操作Service的方法No.方法类型描述1publicComponentName

startService(Intentservice)普通启动一个Service2public

booleanstopService(Intent

name)普通停止一个Service3public

boolean

bindService(Intent

service,ServiceConnection

conn,

int

flags)普通与一个Service绑定4public

void

unbindService(ServiceConnectionconn)普通取消与一个Service的绑定范例:定义服务定义用户的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()

{//创建时调用System.out.println("***

Service

onCreate()");}@Overridepublic

void

onDestroy(){

//销毁时调用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

;

//继续执行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="启动Service"

/>→默认显示文字<Button→定义按钮组件android:id="@+id/stop"→组件ID,程序中使用android:layout_width="fill_parent"→组件宽度为屏幕宽度android:layout_height="wrap_content"→组件高度为文字高度android:text="停止Service"/>→默认显示文字</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);//调用布局文件//取得组件//取得组件this.start.setOnClickListener(new

StartOnClickListenerImpl())

;this.stop.setOnClickListener(new

StopOnClickListenerImpl())

;//单击事件//单击事件}//启动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一个Service程序编写完成之后还需要在项目中,的AndroidManifest.xml文件之中进行在<application>节点下添加如下的代码:<service

android:name=".MyServiceUtil"

/>绑定Service当一个Service启动之后,如果没有出现意外以及明确的调用stopService()方法的话则将会一直驻留在

的服务之中,如果现在希望被一个Activity启动的Service可以在Activity程序结束后自动结束,则可以将一个Activity和

Service进行绑定,在Activity类中专门提供了一个用于绑定Service的bindService()方法,但是在此方法返回的是一个

android.content.ServiceConnection接口的参数ServiceConnection接口定义的方法No.方法类型描述1public void

onServiceConnected(ComponentName

name,

IBinder

service)普通当与一个Service建立连接的时候调用2public

voidonServiceDisconnected(ComponentNamename)普通当与一个Service取消连接的时候调用IBinder接口ServiceConnection接口主要的功能是当一个Activity程序与Service建立连接之后,可以通过ServiceConnection接口执行Service连接(或取消)连接的处理操作,在Activity连接到Service程序上之后,会触发Service类中的onBind()方法,在此方法中要返回一个android.os.IBinder接口的对象。IBinder接口的常量和方法No.常量及方法类型描述1public

static

final

int

DUMP_TRANSACTION常量IBinder协议的事务码:清除 状态2public

static

final

int

_CALL_TRANSACTION常量用户指令的第一个事务码可用3publicstatic

final

int

FLAG_ONEWAY常量transact()方法单向调用的标志位,表示调用者不会等待从被调用者那里返回的结果,而立即返回4publicstatic

final

int

INTERFACE_TRANSACTION常量IBinder协议的事务码:向事务接收端询问其完整的接口规范5public

static

final

int

LAST_CALL_TRANSACTION常量用户指令的最后一个事务码可用6public

static

final

int

_TRANSACTION常量IBinder协议的事务码:

Binder()7public void

dump(FileDescriptorfd,

String[]

args)方法向指定的数据流输出对象状态8public String

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

isBinderAlive()方法检查Binder所在的进程是否活着10public void

linkToDeath(IBinder.DeathRecipient

recipient,

intflags)方法如果指定的Binder

,则为通知 一个新的11public

boolean

Binder()方法检查 对象是否存在12public IInterface

queryLocalInterface(String

descriptor)方法取得对一个接口绑定对象本地实现13public booleantransact(int

code,

Parcel

data,

Parcel

reply,

intflags)方法执行一个一般的操作14public boolean

unlinkToDeath(IBinder.DeathRecipientrecipient,

int

flags)方法删除一个接收通知的范例:定义Service类——MyService.java//必须继承Servicepublic

class

MyServiceUtil

extends

Service

{private

IBinder

myBinder

=

new

Binder(){@Overridepublic

String

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

"MyService

class.";//返回Service类的名称}}

;//绑定时触发@Overridepublic

IBinder

onBind(Intent

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

Service

onBind()

Intent

=

"

+

intent)

;return

myBinder;

}@Override//重新绑定时触发public

void

onRebind(Intent

intent)

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

onRebind()

Intent

=

"

+intent);super.onRebind(intent);

}@Overridepublic

boolean

onUnbind(Intent

intent){

//解除绑定时触发System.out.println("***

Service

onUnbind()

Intent

=

"+

intent);}return

super.onUnbind(intent);@Overridepublic

void

onCreate()

{//创建时触发System.out.println("***

Service

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

void

onDestroy()

{//销毁时触发System.out.println("***

Service

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

intmand(Intent

intent,

int

flags,

int

startId)

{//启动时触发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="启动Service"/>→默认显示文字<Button→按钮组件android:id="@+id/stop"→组件ID,程序中使用android:layout_width="fill_parent"→组件宽度为屏幕宽度android:layout_height="wrap_content"→组件高度为文字高度android:text="停止Service"/>→默认显示文字<Button→按钮组件android:id="@+id/bind"→组件ID,程序中使用android:layout_width="fill_parent"→组件宽度为屏幕宽度android:layout_height="wrap_content"→组件高度为文字高度android:text="绑定Service"/>→默认显示文字<Button→按钮组件android:id="@+id/unbind"→组件ID,程序中使用android:layout_width="fill_parent"→组件宽度为屏幕宽度android:layout_height="wrap_content"→组件高度为文字高度android:text="解除绑定Service"/>→默认显示文字</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//调用布局文件//取得组件//取得组件//取得组件@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));//启动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如果现在没有服务与Activity进行绑定而又调用了解除绑定操作,则会出现错误,所以在解除绑定之前必须要增加一个判断,即:判断一个

Activity是否和一个Service绑定在了一起,如果绑定在了一起才可以使用unbindService()方法解除绑定。一般的做法是定义一个标记性的操作接口,而后在Activity中判断此接口对象是否为null来决定是否绑定了Service,这样说比较抽象,下面通过一个实际的代码来观察,本程序为了方便,只提供了绑定服务与解除绑定两个操作。范例:定义布局管理器——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"/>→默认显示文字<Button→按钮组件android:id="@+id/unbind"→组件ID,程序中使用android:layout_width="fill_parent"→组件宽度为屏幕宽度android:layout_height="wrap_content"→组件高度为文字高度android:text="解除绑定Service"/>→默认显示文字</LinearLayout>范例:定义标记性接口——IServicepublic

interface

IService

{}范例:定义服务类——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)

{//绑定时触发System.out.println("***

Service

onBind()

Intent

=

"

+

intent)

;return

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

BinderImpl

extends

Binder

implements

IService

{@Overridepublic

String

getInterfaceDescriptor()

{return

"MyService

class.";}}}定义Activity程序,绑定服务//定义按钮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);//调用布局文件//取得组件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

;//清空标记}}}private

class

ServiceConnectionImpl

implements

ServiceConnection

{@Overridepublic

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

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

void

onServiceDisconnected(ComponentName

name){//与Service断开连接}}}Context类中定义的系统服务No.常量类型描述1public

static

final

String

CLIPBOARD_SERVICE常量剪贴板服务2public

static

final

String

WINDOW_SERVICE常量窗口服务3public

static

final

String

ALARM_SERVICE常量闹铃服务4public

static

finalString

AUDIO_SERVICE常量音频服务5public

static

final

String

NOTIFICATION_SERVICE常量Notification服务6public

static

final

String

SEARCH_SERVICE常量搜索服务7public

static

finalString

POWER_SERVICE常量电源管理服务8public

static

finalString

WIFI_SERVICE常量WIFI服务9public

static

final

String

ACTIVITY_SERVICE常量运行程序服务范例:剪贴板服务范例:定义布局管理器——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);//设置布局管理器ClipboardManager

clipboardManager

=

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

//取得剪贴板clipboardManager.setText(“jereh");//设置剪贴板中的内容}}范例:取得正在运行的Activity程序信息ActivityManagerAndroid

由于采用了多任务的设计,所以可以同时运行多个Activity程序,而用户如果要想取得这些Activity程序的信息,就可以通过

“ACTIVITY_SERVICE”服务取得所有运行的程序,但是此时通过

super.getSystemService()方法取得的服务对象的类型为“android.app.ActivityManager”。ActivityManager类的常用方法No.方法类型描述1publicList<ActivityManager.RunningAppProcessInfo>

getRunningAppProcesses()普通取得所有的正在运行的进程信息2publicList<ActivityManager.RunningServiceInfo>

getRunningServices(int

maxNum)普通取得指定个数的服务信息3publicList<ActivityManager.RunningTaskInfo>getRunningTasks(int

maxNum)普通取得指定个数的任务信息4public

void

killBackgroundProcesses

(StringpackageName)普通销毁一个 进程,必须设置“KILL_BACKGROUND_PROCESSES”权限5public

ConfigurationInfogetDeviceConfigurationInfo()普通取得设备的配置信息ActivityManager类取得任务信息当使用ActivityManager类取得任务信息的时候有三个方法:getRunningTasks()返回List<ActivityManager.RunningTaskInfo>对象;getRunningServices()返回List<ActivityManager.RunningServiceInfo>对象;getRunningAppProcesses()返回List<ActivityManager.RunningAppProcessInfo>对象;ActivityManager.RunningTaskInfo类的常用属性No.属性类型描述1public

ComponentName

baseActivity属性取得程序运行开始的Activity2public

CharSequence

description属性取得该Activity的描述信息3public

int

id属性取得任务的唯一ID4public

int

numActivities属性取得所有运行的Activity数量,包括已经停止的5public

int

numRunning属性取得所有运行的Activity数量,不包含已停止的6public

Bitmap

thumbnail属性取得任务的图标7publicComponentNametopActivity属性取得当前用户正在操作的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,程序中使用组件宽度为屏幕宽度组加高度为内容高度android:layout_height="wrap_content"

/></LinearLayout>定义Activity程序,列表显示所有运行的Activity程序public

class

MyActivityRunDemo

extends

Activity

{private

ActivityManager

activityManager

=

null;istAdapter

adapter

=

null;//ActivityManager对象//适配器组件privaprivaprivaist<String>all

=new

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

tasklist

=

null;//ListView组件//默认布局管理器List<ActivityManager.RunningTaskInfo>

allTaskInfo;//所有任务信息@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);//取得运行的服务this.listActivity();}public

void

listActivity()

{this.allTaskInfo

=this.activityManager.getRunningTasks(30);//取回30笔任务数量Iterator<ActivityManager.RunningTaskInfo>

iterInfo=allTaskInfo.iterator();//实例化Iterator对象//迭代输出//取出每一个对象while

(iterInfo.hasNext())

{ActivityManager.RunningTaskInfo

task

=

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

task.baseActivity.getClassName());//追加数据}this.adapter

=new

ArrayAdapter<String>(this,

//实例化ArrayAdapter//定义布局文件android.R.layout.simple_list_item_1,MyActivityRunDemo.this.all);//定义显示数据this.tasklist.setAdapter(MyActivityRunDemo.this.adapter);//设置数据}}范例:取得正在运行的服务ActivityManager.RunningServiceInfo类的常用属性No.属性类型描述1public

long

activeSince属性服务从启动到现在所运行的时间2public

int

clientCount属性返回连接到此服务的客户端数量3public

int

crashCount属性返回该服务在运行中的死机次数4public

boolean

foreground属性如果为true则表示服务在 运行5public

long

lastActivityTime属性最后一个Activity与服务的绑定时间6public

int

pid属性服务的ID,如果不是0则表示正在运行7public

String

process属性取得服务的名称8public

long

restarting属性如果不为0,则表示不是运行中的服务,预计会在指定的时间内启动9public

ComponentName

service属性取得服务的组件对象10public

boolean

started属性若服务正在运行则此值为true11public

int

uid属性此服务的UID定义Activity程序,显示所有的服务public

class

MyActivityRunDemo

extends

Activity

{private

ActivityManager

activityManager

=null;

//ActivityManager对象istAdapter

adapter

=

null;//适配器组件privaprivaprivaist<String>all

=new

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

tasklist

=

null;//ListView组件//所有任务信息List<ActivityManager.RunningServiceInfo>

allServices;@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);this.listActivity();}public

void

listActivity()

{this.allServices

=this.activityManager.getRunningServices(30);//30笔任务数量Iterator<ActivityManager.RunningServiceInfo>

iterInfo

=

allServices.iterator();//实例化Iterator对象while

(iterInfo.hasNext()){

//迭代输出ActivityManager.RunningServiceInfo

service

=

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

+"】"+cess);//每一个对象//追加数据}this.adapter

=new

ArrayAdapter<String>(this,

//实例化ArrayAdapterandroid.R.layout.simple_list_item_1,MyActivityRunDemo.this.all);//定义布局文件//定义显示数据this.tasklist.setAdapter(MyActivityRunDemo.this.adapter);//设置数据}}范例:取得全部运行的进程ActivityManager.RunningAppProcessInfo类的常用属性No.属性类型描述1public

int

importance属性取得进程的重要性代码2public

int

importanceReasonCode属性取得进程的重要性原因代码3public

ComponentName

i

ponent属性取得进程重要性原因的客户端组件4public

int

importanceReasonPid属性取得进程重要性原因的客户端进程ID,如果是0则表示没有客户端使用此进程5public

int

pid属性取得进程的PID6public

String[]

pkgList属性取得所有已经加载到进程的程序包7public

String

processName属性取得进程的名称8public

static

final

int

IMPORTANCE_BACKGROUND常量进程重要性代码:表示在 运行9public

static

final

int

IMPORTANCE_EMPTY常量进程重要性代码:没有程序执行此进程10public

static

final

int

IMPORTANCE_FOREGROUND常量进程重要性代码:此进程运行

台UI11public

static

final

int

IMPORTANCE_PERCEPTIBLE常量进程重要性代码:此进程正在运行12public

static

final

int

IMPORTANCE_SERVICE常量进程重要性代码:此进程是继续保持运行的服务13public

static

final

int

IMPORTANCE_VISIBLE常量进程重要性代码:这个线程还没有运行 台,但是正准备 台运行定义Activity程序,取得所有的进程信息public

class

MyActivityRunDemo

extends

Activity

{private

ActivityManager

activityManager

=null;

//ActivityManager对象istAdapter

adapter

=

null;//适配器组件privaprivaprivaist<String>all

=new

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

tasklist

=

null;//ListView组件//默认布局管理器List<ActivityManager.RunningAppProcessInfo>

allApp;//所有任务信息@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);//取得运行的服务this.listActivity();}public

void

listActivity()

{this.allApp

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

iterInfo

=

allApp.iterator();//实例化Iterator对象while

(iterInfo.hasNext())

{//迭代输出ActivityManager.RunningAppProcessInfo

app=iterInfo.next();//每一个对象this.all.add("【ID=

"

+

app.pid

+"

"

+

cessName);

//

追加数据}this.adapter

=new

ArrayAdapter<String>(this,

//实例化ArrayAdapterandroid.R.layout.simple_list_item_1,MyActivityRunDemo.this.all);//定义布局文件//定义显示数据this.tasklist.setAdapter(MyActivityRunDemo.this.adapter);//设置数据}}范例:取得网络信息ephonyManager的常用常量及方法No.常量及方法类型描述1public

static

final

int

NETWORK_TYPE_CDMA常量使用CDMA网络2public

static

final

int

NETWORK_TYPE_GPRS常量使用GPRS网络3public

static

final

int

PHONE_TYPE_CDMA常量使用CDMA通讯4public

static

final

int

PHONE_TYPE_GSM常量使用GSM通讯5public

String

getLine1Number()普通取得

号码6public

String

getNetworkOperatorName()普通取得移动提供商的名称7public

int

getNetworkType()普通取得移动网络的连接类型8public

intgetPhoneType()普通取得

网络类型9public

boolean

isNetworkRoaming()普通判断 是否处于漫游状态10public

void

listen(PhoneSta istener

listener,

int

events)普通状态

器范例:定义布局管理器——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,程序中使用→

组件宽度为屏幕宽度组件高度为自身内容高度</LinearLayout>定义Activity程序,显示网络信息(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);//调用布局管理器//取得组件this.manager

=

( ephonyManager)

super.getSystemService(Context.

EPHONY_SERVICE);//取得服务this.list();//列表显示}定义Activity程序,显示网络信息(B)private

void

list(){

//执行列表显示操作号码"

:

"

号码:"//取得 号码this.all.add(this.manager.getLine1Number()==null

?"没有+

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

==

null

?"没有移动服务商":"移动服务商:"+this.manager.getNetworkOperatorName());//取得移动商名称if

(this.manager.getPhoneType()== ephonyManager.NETWORK_TYPE_CDMA){//判断网络类型this.all.add("移动网络:CDMA");ephonyManager.NETWORK_TYPE_GPRS)

{}

else

if

(this.manager.getPhoneType()

==this.all.add("移动网络:GPRS");}

else{this.all.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论