版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烟台理工学院《展示设计》2022-2023学年第一学期期末试卷
- 制定仓库相关法规遵循的计划
- 急救知识在学校教育中的推广计划
- 许昌学院《社会心理学》2021-2022学年第一学期期末试卷
- 三年级数学计算题专项练习汇编及答案
- 加强与高校合作的人才引进计划
- 班级行为规范的建立与实施计划
- 科技辅助教学应用指导计划
- 销售业绩提升的行动计划
- 美术课堂教学方法探究计划
- 慢性阻塞性肺疾病的早期筛查与干预
- 2024年企业招聘渠道优化方案
- 糖尿病人冬天养生知识讲座
- 成本计算与管理 第5版 课程思政教学材料 项目五 中国新能源汽车强势崛起
- 2024年内蒙古包头包钢集团招聘笔试参考题库含答案解析
- 2023年SQE供应商质量工程师年度总结及下年规划
- 2024年中国林业集团招聘笔试参考题库含答案解析
- 二 《微写作•抒发情感》(教学课件)-【中职专用】高二语文精讲课堂(高教版2023·职业模块)
- 2023劳动合同劳动合同法全文正规版
- “信息化”设备管理使用制度
- 【人才发展】新上岗干部的90天转身计划
评论
0/150
提交评论