创建onButton,然后单击您的kill按钮。从ListView中收集所有选择的按钮及其位置索引,然后使用这些ID获得服务名称并杀死它们。猜猜这很容易。我不想当队长:)
我不认为您完全了解其中的工作原理,因此我不得不相当大地调整您的代码,因此我删除了BroadcastReceiver,以免浪费时间以便以后使用。
将以下行添加到您的AndroidManifest中:
和代码:<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
import android.app.Activity;import android.app.ActivityManager;import android.content.Context;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.*;import java.util.ArrayList;import java.util.List;public class TaskKillerActivity extends Activity { private static final String TAG = "TaskKillerActivity"; TaskListAdapter adapter; ListView lv; // RefreshReceiver receiver;//// class RefreshReceiver extends BroadcastReceiver {// private static final String TAG = "RefreshReceiver";//// @Override// public void onReceive(Context context, Intent intent) {// Log.d(TAG, "refreshing");// clearRunningProcessesList();// loadRunningProcesses();//// }//// } public void clearRunningProcessesList() { adapter.clearTasks(); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); // adapter = new TaskListAdapter(this); LinearLayout ll = new LinearLayout(this); LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); ll.setLayoutParams(lp1); ll.setOrientation(1); lv = new ListView(this); adapter = new TaskListAdapter(this); loadRunningProcesses(); lv.setAdapter(adapter); Button btnKill = new Button(this); btnKill.setText("kill task"); btnKill.setonClickListener(new View.onClickListener() { public void onClick(View v) { //listItem.setBackgroundColor(Color.BLACK); for(TaskObject to :getTasksToKill()) { activityManager.killBackgroundProcesses(to.getProcessName()); }adapter.clearTasks();loadRunningProcesses();lv.setAdapter(adapter); // TODO Auto-generated method stub } }); ll.addView(btnKill); ll.addView(lv); setContentView(ll); } private List<TaskObject> getTasksToKill() { List<TaskObject> tol = new ArrayList<TaskObject>(); for(int i =0;i<adapter.getCount();i++) { //RelativeLayout rl = (RelativeLayout)lv.getChildAt(i); TaskObject to = adapter.getItem(i); //CheckBox cb = (CheckBox)rl.getChildAt(0); if(to.isToKill()) { tol.add(to); } } return tol; } @Override protected void onDestroy() { super.onDestroy(); // getApplicationContext().unregisterReceiver(receiver); } public void loadRunningProcesses() { ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> appinfolist = activityManager .getRunningAppProcesses(); Log.d(TAG, "AppInfoList Size: " + appinfolist.size()); for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : appinfolist) { TaskObject runningtask = new TaskObject(); runningtask.setPid(runningAppProcessInfo.pid); runningtask.setProcessName(runningAppProcessInfo.processName); adapter.addTask(runningtask); } } class TaskObject { private int pid; private String processName; private boolean toKill; public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getProcessName() { return processName; } public void setProcessName(String processName) { this.processName = processName; } public boolean isToKill() { return toKill; } public void setToKill(boolean toKill) { this.toKill = toKill; } } class TaskListAdapter extends baseAdapter { private static final String TAG = "TaskListAdapter"; ArrayList<TaskObject> list; Context context; public TaskListAdapter(Context context) { Log.d(TAG, "created new task list adapter"); this.context = context; if (list == null) { list = new ArrayList<TaskKillerActivity.TaskObject>(); } } public void addTask(TaskObject taskObject) { list.add(taskObject); } public void clearTasks() { list.clear(); Log.d(TAG, "list size:" + list.size()); this.notifyDataSetChanged(); } public int getCount() { return list.size(); } public TaskObject getItem(int position) { return list.get(position); } public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) {// LayoutInflater inflater = LayoutInflater.from(context);// View view = inflater.inflate(R.layout.taskitem, null); RelativeLayout rl = new RelativeLayout(context); TextView textPid = new TextView(context); textPid.setId(222222); textPid.setText(Integer.toString(getItem(position).getPid())); TextView textName = new TextView(context); textName.setId(333333); textName.setText(getItem(position).getProcessName()); CheckBox chckKill = new CheckBox(context); chckKill.setonClickListener(new View.onClickListener() { public void onClick(View v) { //is chkIos checked? if (((CheckBox) v).isChecked()) { getItem(position).setToKill(true); } } }); chckKill.setTag(getItem(position).getPid()); chckKill.setId(11111111); RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); rl.addView(chckKill,lp2); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.RIGHT_OF, chckKill.getId()); lp.setMargins(25,0,0,0); rl.addView(textName,lp); RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); lp1.addRule(RelativeLayout.RIGHT_OF, chckKill.getId()); lp1.setMargins(25,20,0,0); rl.addView(textPid,lp1); return rl; } }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)