使用ActivityManager实现进程管理
来源:互联网 发布:淘宝月饼推荐 编辑:程序博客网 时间:2024/05/10 07:01
Android中使用ActivityManager可以获得进程信息,并对进程进行管理,如结束进程等。本文使用ActivityManager获得进程列表,并结束选中的进程。
首先,看看布局文件。
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<LinearLayout
android:layout_width=
"fill_parent"
android:layout_height=
"match_parent"
android:layout_weight=
"5"
>
<TextView
android:id=
"@+id/textView1"
style=
"@style/my_style"
android:layout_width=
"match_parent"
android:layout_height=
"fill_parent"
android:layout_weight=
"3"
/>
<TextView
android:id=
"@+id/textView2"
style=
"@style/my_style"
android:layout_width=
"match_parent"
android:layout_height=
"fill_parent"
android:layout_gravity=
"center_vertical|center_horizontal"
android:layout_weight=
"3"
android:gravity=
"center_vertical|center_horizontal"
android:text=
"进程号"
/>
<TextView
android:id=
"@+id/textView3"
style=
"@style/my_style"
android:layout_width=
"match_parent"
android:layout_height=
"fill_parent"
android:layout_weight=
"2"
android:gravity=
"center_vertical|center_horizontal"
android:text=
"进程名"
/>
<TextView
android:id=
"@+id/textView4"
style=
"@style/my_style"
android:layout_width=
"match_parent"
android:layout_height=
"fill_parent"
android:layout_weight=
"3"
android:gravity=
"center_vertical|center_horizontal"
android:text=
"内存"
/>
</LinearLayout>
<ListView
android:id=
"@id/android:list"
android:layout_width=
"fill_parent"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
>
</ListView>
<Button
android:id=
"@+id/btn_pro"
style=
"@style/my_style"
android:layout_width=
"fill_parent"
android:layout_height=
"match_parent"
android:layout_weight=
"5"
android:text=
"结束"
/>
</LinearLayout>
然后是Java文件。
package
com.hzhi.sysinfor;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
android.app.ActivityManager;
import
android.app.AlertDialog;
import
android.app.ListActivity;
import
android.app.ProgressDialog;
import
android.content.Context;
import
android.content.DialogInterface;
import
android.content.Intent;
import
android.content.pm.PackageInfo;
import
android.content.pm.PackageManager;
import
android.graphics.drawable.Drawable;
import
android.net.Uri;
import
android.os.Bundle;
import
android.os.Debug;
import
android.util.Log;
import
android.view.Menu;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.view.ViewGroup;
import
android.widget.BaseAdapter;
import
android.widget.Button;
import
android.widget.CheckBox;
import
android.widget.CompoundButton;
import
android.widget.CompoundButton.OnCheckedChangeListener;
import
android.widget.ImageView;
import
android.widget.LinearLayout;
import
android.widget.TextView;
import
android.widget.Toast;
public
class
process
extends
ListActivity{
Button btn_stop;
PackageManager pkg_man;
list_pro list_ada;
ActivityManager am;
// 获得所有的进程列表
public
void
get_pro(){
list_ada =
new
list_pro(
this
);
// 包管理器
am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
// 获取手机内所有应用
List<ActivityManager.RunningAppProcessInfo> pi = am.getRunningAppProcesses();
for
(
int
i=
0
; i<pi.size(); i++){
ActivityManager.RunningAppProcessInfo pii =
(ActivityManager.RunningAppProcessInfo) pi.get(i);
int
[] mem =
new
int
[] {pii.pid};
Debug.MemoryInfo[] mi = am.getProcessMemoryInfo(mem);
list_ada.addItem(String.valueOf(pii.pid),
pii.processName,
String.valueOf(mi[
0
].dalvikPrivateDirty) +
"KB"
,
false
);
}
setListAdapter(list_ada);
}
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_process);
get_pro();
btn_stop = (Button) findViewById(R.id.btn_pro);
btn_stop.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
for
(
int
j=
0
; j<list_ada.list_data.size(); j++){
// 该应用需要删除
if
(list_ada.list_data.get(j).is_chk){
String name = (String)
list_ada.list_data.get(j).txt_name.getText();
final
String pro = (String)
list_ada.list_data.get(j).txt_name.getText();
new
AlertDialog.Builder(process.
this
)
.setTitle(
"结束进程"
)
.setMessage(
"确定结束"
+ name +
"吗?"
)
.setPositiveButton(
"是"
,
new
DialogInterface.OnClickListener() {
@Override
public
void
onClick(DialogInterface arg0,
int
arg1) {
unload(pro);
get_pro();
}
})
.setNegativeButton(
"否"
,
null
)
.show();
}
}
}
});
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return
true
;
}
public
boolean
unload (String n){
boolean
res =
true
;
am.killBackgroundProcesses(n);
Toast.makeText(process.
this
,
"进程"
+ n +
"已经结束!"
, Toast.LENGTH_LONG)
.show();
return
res;
}
}
// pro列表
class
list_pro
extends
BaseAdapter
implements
OnClickListener{
public
Context ctx;
public
List<item_pro> list_data;
public
list_pro(Context context){
ctx = context;
list_data =
new
ArrayList<item_pro>();
}
@Override
public
int
getCount() {
// TODO Auto-generated method stub
return
list_data.size();
}
@Override
public
Object getItem(
int
arg0) {
// TODO Auto-generated method stub
return
list_data.get(arg0);
}
@Override
public
long
getItemId(
int
arg0) {
// TODO Auto-generated method stub
return
list_data.indexOf(arg0);
}
@Override
public
View getView(
int
position, View convertView, ViewGroup parent) {
item_pro my_item;
Integer i =
0
;
if
(convertView ==
null
)
{
my_item =
new
item_pro(ctx,
(String)list_data.get(position).txt_no.getText(),
(String)list_data.get(position).txt_name.getText(),
(String)list_data.get(position).txt_size.getText(),
list_data.get(position).is_chk);
}
else
{
my_item = (item_pro)convertView;
my_item.txt_no.setText(list_data.get(position).txt_no.getText());
my_item.txt_name.setText(list_data.get(position).txt_name.getText());
my_item.txt_size.setText(list_data.get(position).txt_size.getText());
}
CheckBox chk_item = (CheckBox) my_item.chk_pro;
chk_item.setOnClickListener(
this
);
chk_item.setChecked(list_data.get(position).is_chk);
chk_item.setTag(position);
return
my_item;
}
public
void
addItem(String txt_no, String txt_name,
String str_size, Boolean bol_chk)
{
list_data.add(
new
item_pro(ctx,txt_no,txt_name,str_size,bol_chk));
}
@Override
public
void
onClick(View v) {
// TODO Auto-generated method stub
CheckBox c = (CheckBox) v;
int
pos = Integer.parseInt(v.getTag().toString());
list_data.get(pos).is_chk = c.isChecked();
}
}
// pro列表的一行
class
item_pro
extends
LinearLayout{
public
CheckBox chk_pro;
// 进程号
public
TextView txt_no;
// 进程名
public
TextView txt_name;
// 占用内存大小
public
TextView txt_size;
// 是否选中
public
boolean
is_chk;
public
item_pro(Context ctx, String str_no, String str_name,
String str_size, Boolean bol_chk)
{
super
(ctx);
this
.setOrientation(HORIZONTAL);
int
hei =
80
;
chk_pro =
new
CheckBox(ctx);
addView(chk_pro,
new
LinearLayout.LayoutParams((
int
)(MainActivity.wid_scr*
0.2
),hei));
txt_no =
new
TextView(ctx);
txt_no.setText(str_no);
addView(txt_no,
new
LinearLayout.LayoutParams((
int
)(MainActivity.wid_scr*
0.2
),hei));
txt_name =
new
TextView(ctx);
txt_name.setText(str_name);
addView(txt_name,
new
LinearLayout.LayoutParams((
int
)(MainActivity.wid_scr*
0.4
),hei));
txt_size =
new
TextView(ctx);
txt_size.setText(str_size);
addView(txt_size,
new
LinearLayout.LayoutParams((
int
)(MainActivity.wid_scr*
0.2
),hei));
is_chk = bol_chk;
}
}
Java文件实现了三个类。process类是整个Activity的类,list_pro是适配器类,item_pro是列表里面的一行。
在process类的get_pro()方法里面,语句am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)获得了一个ActivityManager,List<ActivityManager.RunningAppProcessInfo> pi = am.getRunningAppProcesses()获得了系统的所有进程,并存储在列表pi里面。语句ActivityManager.RunningAppProcessInfo pii = (ActivityManager.RunningAppProcessInfo) pi.get(i)获得了每一个进程信息,pii.processName是该进程的进程名(通常是该进程对应的包名),mi[0].dalvikPrivateDirty是该进程占用的内存大小(通常以KB为单位)。在unload (String n)方法里面,am.killBackgroundProcesses(n)结束了进程名为n的进程,不过要在AndroidManifest.xml中加入android.permission.KILL_BACKGROUND_PROCESSES权限,否则会出现权限错误。
运行效果如下。
需要注意的是,系统进程是不能结束的。
- 使用ActivityManager实现进程管理
- 使用ActivityManager的forceStopPackage方法结束进程
- 使用ActivityManager的forceStopPackage方法结束进程
- 【转】使用ActivityManager的forceStopPackage方法结束进程
- 通过ActivityManager 管理activity
- ActivityManager实现机制学习
- ActivityManager中获取app进程
- ActivityManager 获取系统进程信息
- Android ActivityManager所在进程探究
- ActivityManager的简单使用
- ActivityManager的使用
- Android熟悉使用PackageManager,ActivityManager,MemoryInfo,引入布局文件Include的使用,values的管理
- ActivityManager--获取栈顶Activity及其所属进程,activitymanager
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一) .
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)
- hjr学习-模式识别:隐马尔可夫模型
- 8583报文相关(知识小结)
- HTML+CSS基础 a标签实现点击超链接后新建一个网页跳转到指定链接
- Hadoop常用的操作指令
- webStorm快捷键
- 使用ActivityManager实现进程管理
- Struts2 自定义局部类型转换器 出现异常 没捕获 将进convertError
- struts配置的result属性。 result的动态配置 . result 全局结果 global-result
- android中的动画效果
- 使用随机算法产生一个数,要求把1-1000W之间这些数全部生成
- 九度1099
- 2016.9.24初中部上午NOIP普及组比赛总结
- LeetCode 199. Binary Tree Right Side View
- 如何判断一个链表是否有环,如果有环,并找出环的入口