修改了部分代码,现在可以加载 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;
}
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();
}
}
}
}
};
}