美文网首页
手机加速(获取APP的信息,并关闭)

手机加速(获取APP的信息,并关闭)

作者: 谜之龙 | 来源:发表于2017-04-26 16:20 被阅读0次
    aa.png

    查找用户的进程,系统的进程并关闭
    主界面

    public class RocketActivity extends BaseActivity implements View.OnClickListener {
    private TextView mTvModel;
    private ProgressBar mProgressMemory;
    private Button mBtnClear;
    private ListView mListApps;
    private ProgressBar mProgress;
    private Button mBtnState;
    private List<RunInfo> data;
    private RocketAdapter adapter;
    private List<RunInfo> allUser;
    public static CheckBox mCbAllSelect;
    
    
    
    
    @Override
    protected boolean isShowActionBar() {
        return true;
    }
    
    @Override
    protected void initData() {
        setTitle("手机加速");
        mTvModel.setText(Build.MODEL);
        long avaiable = MemoryInfoManager.getPhoneAvailableMemoeySize();
        long total = MemoryInfoManager.getPhoneTotalMemoeySize();
        double rote = (total - avaiable) * 1.0 / total;
        mProgressMemory.setProgress((int) (rote * 100));
        mBtnState.setText("只显示系统进程");
        mBtnState.setTag(true);
        new Thread() {
            @Override
            public void run() {
                allUser = Program.getUser();
                RocketActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        adapter = new RocketAdapter(allUser);
                        mListApps.setAdapter(adapter);
                    }
                });
            }
        }.start();
    
    }
    
    @Override
    protected void initView() {
        mTvModel = getViewById(R.id.tv_rocket_model);
        mProgressMemory = getViewById(R.id.pb_rocket_rote);
        mBtnClear = getViewById(R.id.bt_rocket_clear);
        mListApps = getViewById(R.id.list_rocket_appinfo);
        mProgress = getViewById(R.id.pb_rocket_clear);
        mBtnState = getViewById(R.id.bt_rocket_state);
        mCbAllSelect = getViewById(R.id.cb_rocket_allselct);
    
    
    }
    
    @Override
    protected void setListaner() {
        mBtnClear.setOnClickListener(this);
        mBtnState.setOnClickListener(this);
        //全选选择监听
       mCbAllSelect.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
    
               for (RunInfo runInfo : allUser) {
                   runInfo.setIsselect(mCbAllSelect.isChecked());
               }
               adapter.notifyDataSetChanged();
           }
       });
    }
    
    @Override
    protected int getLayoutId() {
        return R.layout.activity_rocket;
    }
    
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bt_rocket_clear://一键清理
                List<RunInfo> runInfoList=new ArrayList<>();
                for (RunInfo info : allUser) {
                    if (info.isselect()){
                        Program.killApp(info.getPackname());
                    }else{
                        runInfoList.add(info);
                    }
                }
                allUser.clear();
                allUser.addAll(runInfoList);
                adapter.notifyDataSetChanged();
                break;
            case R.id.bt_rocket_state://进程切换
                final boolean isUserApp = (boolean) mBtnState.getTag();
                new Thread() {
                    @Override
                    public void run() {
                        if (isUserApp) {//显示当前用户信息
                            mBtnState.setTag(false);
                            data = Program.getAllUser();
                            Log.e("aa", "size" + data.size());
                        } else {//显示系统信息
                            mBtnState.setTag(true);
                            data = Program.getUser();
                        }
                        //只能在主线程更新UI布局
                        RocketActivity.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                boolean tag = (boolean) mBtnState.getTag();
                                String msg = (tag == true) ? "只显示用户进程" : "只显示系统进程";
                                mBtnState.setText(msg);
                                allUser.clear();
                                allUser.addAll(data);
                                adapter.notifyDataSetChanged();
    
                            }
                        });
                    }
                }.start();
                break;
        }
    }
    }
    

    主界面的布局XML

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.gfd.phone.activity.RocketActivity">
      //顶部布局,导入一个新的布局
    <include
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        layout="@layout/layout_rocket_top"/>
    
    <!-- 中间部分的布局 -->
    <RelativeLayout
        android:layout_marginTop="4dp"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    
        <ListView
            android:id="@+id/list_rocket_appinfo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    
        <ProgressBar
            android:id="@+id/pb_rocket_clear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:indeterminateDrawable="@drawable/rotate_rocket_pb"
            android:indeterminateOnly="true"
            android:indeterminateBehavior="repeat"
            android:indeterminateDuration="600"
            android:visibility="gone"
            />
    
    </RelativeLayout>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="8dp">
    
        <CheckBox
            android:id="@+id/cb_rocket_allselct"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <Button
            android:id="@+id/bt_rocket_state"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/bt_rocket_bg"
            android:text="只显示系统进程"
            android:textColor="#fff"/>
    </LinearLayout>
    </LinearLayout>
    

    顶部的布局

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView
        android:id="@+id/tv_rocket_model"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="手机型号"
        android:textSize="26sp"
        android:padding="4dp"
        android:layout_gravity="center_horizontal"/>
    
    <ProgressBar
        android:id="@+id/pb_rocket_rote"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="24dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="6dp"
        android:max="100"
         //这个是自己写的进度条样式
        android:progressDrawable="@drawable/progress_bg" />
    
    <Button
        android:id="@+id/bt_rocket_clear"
        android:layout_width="match_parent"
        android:layout_height="46dp"
        android:text="一键清理"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="6dp"
        android:textColor="#fff"
       //自己写的点击样式
        android:background="@drawable/bt_rocket_bg"
        />
       </LinearLayout>
    

    自己写的进度条样式ProgressBar

    //图层列表
      <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 水平进度条背景的样式 -->
    <item android:id="@android:id/background">
        <shape android:shape="rectangle">
            <corners android:radius="10dp"/>
            <solid android:color="#b3b1b1"/>
        </shape>
    </item>
    
    <!-- 水平进度条表示进度的样式 -->
    <item android:id="@android:id/progress">
        <clip><!-- 剪裁-->
            <shape android:shape="rectangle">
                <corners android:radius="10dp"/>
                <solid android:color="#17d4f5"/>
            </shape>
        </clip>
    
    </item>
    </layer-list>
    

    实例工具

    public class RunInfo {
    String appname;
    String packname;
     String versionName;
    Drawable icon;
    long usemomory;
    boolean isselect;
    
    public String getVersionName() {
        return versionName;
    }
    
    public void setVersionName(String versionName) {
        this.versionName = versionName;
    }
    
    public void isselect(boolean select){
      this.isselect=select;
    }
    
    public boolean isselect() {
        return isselect;
    }
    
    public void setIsselect(boolean isselect) {
        this.isselect = isselect;
    }
    
    public RunInfo(String appname, Drawable icon, String packname, long usemomory){
      this.appname=appname;
        this.icon=icon;
        this.packname=appname;
        this.usemomory=usemomory;
    }
    public RunInfo(String appname, Drawable icon, String packname, String versionName){
        this.appname=appname;
        this.icon=icon;
        this.packname=packname;
        this.versionName = versionName;
    
    }
    
    public String getAppname() {
        return appname;
    }
    
    public void setAppname(String appname) {
        this.appname = appname;
    }
    
    public String getPackname() {
        return packname;
    }
    
    public void setPackname(String packname) {
        this.packname = packname;
    }
    
    public Drawable getIcon() {
        return icon;
    }
    
    public void setIcon(Drawable icon) {
        this.icon = icon;
    }
    
    public String getUsemomory() {
        String size=Formatter.formatFileSize(App.appContext,usemomory);
        return size;
    }
    
    public void setUsemomory(long usemomory) {
        this.usemomory = usemomory;
    }
    }
    

    适配器

    public class RocketAdapter extends BaseAdapter {
    
    private List<RunInfo> datas;
    
    public RocketAdapter(List<RunInfo> datas) {
        this.datas = datas;
    }
    
    @Override
    public int getCount() {
        return datas == null ? 0 : datas.size();
    }
    
    @Override
    public Object getItem(int position) {
        return position;
    }
    
    @Override
    public long getItemId(int position) {
        return position;
    }
    //适配器进行的优化
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.rocket_list, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        final RunInfo runInfo=datas.get(position);
        holder.ioce.setImageDrawable(runInfo.getIcon());
        holder.select.setChecked(runInfo.isselect());
        holder.tvName.setText(runInfo.getAppname());
        holder.tvsize.setText(runInfo.getUsemomory());
        holder.packname.setText(runInfo.getPackname());
        //这个是全选按钮的设置
        holder.select.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
              runInfo.setIsselect(isChecked);
                if (!isChecked){
                    RocketActivity.mCbAllSelect.setChecked(false);
                    return;
                }
                for (RunInfo data : datas) {
                   if (!data.isselect())
                    return;
                }
                RocketActivity.mCbAllSelect.setChecked(true);
            }
        });
        holder.select.setChecked(runInfo.isselect());
        return holder.convertView;
    }
    
    public class ViewHolder {
    
        public ImageView ioce;
        public View convertView;
        public TextView tvName;
        public TextView tvsize;
        public   CheckBox select;
        public TextView packname;
    
        public ViewHolder(View convertView) {
    
            this.convertView = convertView;
            select = (CheckBox) convertView.findViewById(R.id.cb_item_rocket_select);
            ioce = (ImageView) convertView.findViewById(R.id.img_item_rocket_ioce);
            tvName = (TextView) convertView.findViewById(R.id.tv_item__rocket_name);
            tvsize = (TextView) convertView.findViewById(R.id.tv_tv_item__rocket_size);
            packname = (TextView) convertView.findViewById(R.id.tv_tv_item__rocket_packname);
        }
    }
     }
    

    获得各种APP信息的class

    public class Program  {
    
    public static List<RunInfo> runInfoList;
    public static List<RunInfo> allUser;
    public static List<RunInfo> user;
    private static PackageInfo packageInfo;
    private static List<RunInfo> allAppInfo;
    private static List<RunInfo> allAppuser;
    private static List<RunInfo> allAppsystem;
    
    public static List<RunInfo> getAllinfo(){
        ActivityManager am= (ActivityManager) App.appContext.getSystemService(Context.ACTIVITY_SERVICE);
        PackageManager pm= App.appContext.getPackageManager();
        List<ActivityManager.RunningAppProcessInfo> allappinfo = am.getRunningAppProcesses();
        runInfoList = new ArrayList<>();
        allUser= new ArrayList<>();
        user = new ArrayList<>();
    
            for (ActivityManager.RunningAppProcessInfo appProcessInfo : allappinfo) {
                try{
                //每个进程代表的ID
                int id=appProcessInfo.pid;
                //进程的包名
                String packName=appProcessInfo.processName;
                //进程的级别
                int importance=appProcessInfo.importance;
                //判断是本APP时不显示
                if (packName.equals(App.appContext.getPackageName())){
                    continue;
                }
                if (importance>=ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE){
                    //得到内存信息
                    Debug.MemoryInfo[] memoryInfo = am.getProcessMemoryInfo(new int[]{id});
                    //得到内存的大小
                    long size=memoryInfo[0].getTotalPrivateDirty()*1024;
                    //APP的信息
                    ApplicationInfo appinfo = pm.getApplicationInfo(packName, 0);
                    //APP的图标
                    Drawable icon = appinfo.loadIcon(pm);
                    //APP的名字
                    String appName = appinfo.loadLabel(pm).toString();
                    RunInfo runInfo=new RunInfo(appName,icon,packName,size);
                    runInfoList.add(runInfo);
                    if ((appinfo.flags & appinfo.FLAG_SYSTEM)!=0){
                        allUser.add(runInfo);
                    }else {
                         user.add(runInfo);
                    }
                }
            }catch (Exception e){
            e.printStackTrace();
        }
            }
    
        return runInfoList;
    }
      public static List<RunInfo> getAllUser(){
       getAllinfo();
    return allUser;
     }
     public static  List<RunInfo> getUser(){
      getAllinfo();
    return user;
     }
    

    获取内存信息的Class

     public class MemoryInfoManager {
    
    /**
     * 获取手机可用内存
     * @return bit
     */
    public static long getPhoneAvailableMemoeySize(){
        ActivityManager am = (ActivityManager) App.appContext.getSystemService(Context.ACTIVITY_SERVICE);
        //获取内存信息
        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
        am.getMemoryInfo(memoryInfo);
        return memoryInfo.availMem;//bit
    }
    
    /**
     * 获取手机总的内存大小
     * @return bit
     */
    public static long getPhoneTotalMemoeySize(){
        ActivityManager am = (ActivityManager) App.appContext.getSystemService(Context.ACTIVITY_SERVICE);
        //获取内存信息
        ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
        am.getMemoryInfo(memoryInfo);
        return memoryInfo.totalMem;//bit
    }
    

    关闭App是要权限,在注册清单

    <!-- 杀死运行APP的权限 -->
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

    相关文章

      网友评论

          本文标题:手机加速(获取APP的信息,并关闭)

          本文链接:https://www.haomeiwen.com/subject/jeppzttx.html