android开发 用线程进行耗时操作,统一处理 第二版

来源:互联网 发布:js控制视频进度条 编辑:程序博客网 时间:2024/05/18 15:29

修改了部分代码,现在可以加载 public , private , protected 修饰的方法,Util 中仅开启了一个单线程去循环读取队列中的值,有就执行,没有就sleep.


贴代码


MainActivity

package com.bjj.test_thread_step;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViewById(R.id.start).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                addAll();            }        });    }    private void addAll(){        ThreadUtil.getInstance().addIntoThread("step1",MainActivity.this);        ThreadUtil.getInstance().addIntoThread("step2",MainActivity.this);        ThreadUtil.getInstance().addIntoThread("step3",MainActivity.this);        ThreadUtil.getInstance().addIntoThread("step4",MainActivity.this);    }    public void step1(){        runOnUiThread(new Runnable() {            @Override            public void run() {                ((TextView) findViewById(R.id.t1)).setText("这是第一步");            }        });    }    private void step2(){        runOnUiThread(new Runnable() {            @Override            public void run() {                ((TextView) findViewById(R.id.t2)).setText("这是第二步");            }        });    }    protected void step3(){        runOnUiThread(new Runnable() {            @Override            public void run() {                ((TextView) findViewById(R.id.t3)).setText("这是第三步");            }        });    }    public void step4(){        runOnUiThread(new Runnable() {            @Override            public void run() {                ( (TextView)findViewById(R.id.t4) ).setText("这是第四步");            }        });    }}


MyClass

package com.bjj.test_thread_step;/** * Created by Administrator on 2016/4/19. */public class MyClass {    public String methodName;    public Object object;}


ThreadUtil


package com.bjj.test_thread_step;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by Administrator on 2016/4/18. */public class ThreadUtil {    private ExecutorService services;    public static ThreadUtil thread;    private ArrayList<MyClass> classes;    public static ThreadUtil getInstance(){        if(thread == null){            thread = new ThreadUtil();        }        return  thread;    }    public ThreadUtil(){        services = Executors.newSingleThreadExecutor();        classes = new ArrayList<MyClass>();        services.execute(main_Runnable);    }    public void addIntoThread(String methodName,Object _class){        MyClass c = new MyClass();        c.methodName = methodName;        c.object = _class;        classes.add(c);    }    public void runMethod(String methodName,final Object _class){        Method method = null;        try {            //获取public方法            method = _class.getClass().getMethod(methodName);        } catch (NoSuchMethodException e) {            try {                //获取非public方法                method = _class.getClass().getDeclaredMethod(methodName);            } catch (NoSuchMethodException e1) {            }        }        if(method == null){            return;        }        try {            method.setAccessible(true);            method.invoke(_class);        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (InvocationTargetException e) {            e.printStackTrace();        }    }    private Runnable main_Runnable = new Runnable() {        @Override        public void run() {            while(true){                if(classes != null && classes.size() > 0){                    runMethod(classes.get(0).methodName,classes.get(0).object);                    classes.remove(0);                }                else{                    try {                        Thread.sleep(100);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }    };}



0 0
原创粉丝点击