Androidサブスレッドテスト
4414 ワード
private volatile boolean mStopped = false;
private int i;
TextView tv1;
TextView tv2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
tv1 = (TextView) findViewById(R.id.tv1);
tv2 = (TextView) findViewById(R.id.tv2);
Button button4 = (Button) findViewById(R.id.button4); // “ ”
Button button5 = (Button) findViewById(R.id.button5); // “ ”
//
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( mStopped = true) {
mStopped = false;
Log.i(" ID", String.valueOf(Thread.currentThread().getId()));
Log.i(" var", String.valueOf(Thread.currentThread().getName()));
fgetsum(String.valueOf("mytv1"), 1);
fgetsum(String.valueOf("mytv2"), 2);
}
}
});
//
button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mStopped = true;
}
});
}
// Handler ,Handler Message Rannable MessageQueue
//Handler Message , tv1
// UI
final Handler handler2 = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 0x101:
tv1.setText(String.valueOf(msg.obj.toString()));
break;
case 0x102:
tv2.setText(String.valueOf(msg.obj.toString()));
break;
default:
tv1.setText(String.valueOf(" msg.what"));
break;
}
}
};
// Runnable
// Message Handler
//Runnable UI , UI
private void fgetsum(final String strname, final int tvid) {
Thread thread = new Thread() {
@Override
public void run() {
while (mStopped == false) {
i++;
try {
Thread.sleep(1000);
Log.i(" ID" + strname, String.valueOf(Thread.currentThread().getId()));
Log.i(" " + strname, String.valueOf(Thread.currentThread().getName()));
Message message = handler2.obtainMessage();
message.arg1 = tvid;
// tvid=1 , i
if(tvid==1){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss", Locale.getDefault());
message.what=0x101;
message.obj = String.valueOf(sdf.format(new Date()));
}else{
message.what=0x102;
message.obj =i;
}
handler2.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
thread.start();
thread = null;
}
Androidはwinformと同様に、メインスレッドでUIのコントロールを直接更新することはできません.そうしないと、インタフェースが偽死します(進捗バー、ダウンロードなどのタスクなど)
ASP.NETの下にはBackgroundWorkerがありますが、Androidは一般的にHandler+Thread+Messageで実現され、使い慣れています.ネットの人は、JAVAプログラムを見るのは慣れないと言って、多くの機能が実現します.NET面倒くさい....
またJAVAの資料を調べてみると、N個のスレッドを作成するには、ラインプログラムプール(ExecutorService)を使用することをお勧めします.