当前位置: 代码迷 >> Android >> OnCreate与Thread,该如何处理
  详细解决方案

OnCreate与Thread,该如何处理

热度:76   发布时间:2016-04-28 01:44:35.0
OnCreate与Thread
方法一:

protected void onCreate(Bundle savedInstanceState) {
        aBtn = (Button) findViewById(R.id.aBtn);
aBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String btn_str = aBtn.getText().toString();
if ("开始".equals(btn_str)) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
start();
}
});
t.start();
} else
stop();
}
});
Button bBtn = (Button) findViewById(R.id.bBtn);
bBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.e("++++++++++", "++++++++++");
}
});



方法二:

protected void onCreate(Bundle savedInstanceState) {
        aBtn = (Button) findViewById(R.id.aBtn);
aBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String btn_str = aBtn.getText().toString();
if ("开始".equals(btn_str)) {
new Thread(new Runnable() {
@Override
public void run() {
start();
}
}).start();
} else
stop();
}
});
Button bBtn = (Button) findViewById(R.id.bBtn);
bBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.e("++++++++++", "++++++++++");
}
});



方法一正常,点击A按钮,进入开始正常执行,点击B按钮才会触发++++++的输出,
方法二不正常,点击A按钮,进入开始之后,就会不断的触发+++++的输出。

这个问题不理解是为什么,有大神给解释下吗?

PS:确保在start方法中不会有影响到按钮B的操作。
------解决思路----------------------
private Button aBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.btn_test_layout);

// aBtn = (Button) findViewById(R.id.btna);
//        aBtn.setOnClickListener(new OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                String btn_str = aBtn.getText().toString();
//                if ("开始".equals(btn_str)) {
//                    Thread t = new Thread(new Runnable() {
//                        @Override
//                        public void run() {
//                            Log.e("tag", "222222222222");
//                        }
//                    });
//                    t.start();
//                } else
//                 Log.e("tag", "3333333333333333");
//            }
//        });
//        Button bBtn = (Button) findViewById(R.id.btnb );
//        bBtn.setOnClickListener(new OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                Log.e("++++++++++", "++++++++++");
//            }
//        });

aBtn = (Button) findViewById(R.id.btna);
        aBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String btn_str = aBtn.getText().toString();
                if ("开始".equals(btn_str)) {
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                         Log.e("tag", "222222222222");
                        }
                    }).start();
                } else
                 Log.e("tag", "111111111111111");
            }
        });
        Button bBtn = (Button) findViewById(R.id.btnb);
        bBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
             Log.e("tag", "3333333333333333");
            }
        });
}


亲测,没有错~~~~~~~~~~~~~~~~~~~
------解决思路----------------------
引用:
有没有大神给讲解一下run方法中调用start方法的作用。。。。看不太懂呢。。。。

你可能外部有写一个start()方法……

public static void start() {
/**
 * 外部的start方法,静态
 */
}

public void test() {

new Thread(new Runnable() {

public void start() {
/**
 * 加一个start方法
 */
}

@Override
public void run() {
/**
 * 这里的start的2种情况
 */
start();
}
}).start();
}
  相关解决方案