public class TestThread extends Activity {
private Button button_test;
private Button button2;
private ProgressBar bar;
private boolean isRunning = false;
MyThread myThread;
volatile boolean bThreadRun = false;
int c = Color.BLUE;
MyThread1 myThread1;
volatile boolean bThreadRun1 = false;
int c1 = Color.BLUE;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.test_thread);
button_test = (Button)findViewById(R.id.button_test);
button_test.setOnClickListener(test);
button_test.setText("Start thread");
button2 = (Button)findViewById(R.id.Button2);
bar = (ProgressBar)findViewById(R.id.progressBar1);
//showResult();
}
@Override
public void onStart()
{
super.onStart();
bar.setProgress(0);
Thread background = new Thread(
new Runnable()
{
public void run()
{
try {
for (int i=0;i<20 && isRunning;i++)
{
Thread.sleep(1000);
handler.sendMessage(handler.obtainMessage());
}
}
catch (Throwable t)
{
//Just end the background thread
}
}
}
);
isRunning = true;
background.start();
}
@Override
public void onStop()
{
super.onStop();
isRunning = false;
}
//Process the handler
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg)
{
bar.incrementProgressBy(5);
}
};
private Button.OnClickListener test = new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
//Start a custom thread
if (!bThreadRun)
{
myThread = new MyThread();
myThread.start();
bThreadRun = true;
button_test.setText("Stop thread...");
}
else
{
bThreadRun = false;
button_test.setText("Start thread");
}
}
};
//Add the handle for myThread
private Handler myHandler = new Handler()
{
public void handleMessage(Message msg)
{
switch (msg.what)
{
case 1:
setTitle("test myThread" + c);
setTitleColor(c);
break;
case 2:
setTitle("myThread is over.");
setTitleColor(Color.RED);
break;
}
}
};
//Add the implement code for MyThread.
public class MyThread extends Thread
{
public MyThread(){}
@Override
public void start()
{
super.start();
}
@Override
public void run()
{
while (bThreadRun)
{
try {
sleep(100);
if (c > ((1<<16)-1))
{
c = 0;
}
else
{
c += 100;
}
Message message = new Message();
message.what = 1;
myHandler.sendMessage(message);
}
catch (InterruptedException ex)
{
//Do some exception processing.
}
}
Message message1 = new Message();
message1.what = 2;
myHandler.sendMessage(message1);
}
}
//Add the implement code for MyThread1.
public class MyThread1 implements Runnable{
@Override public void run()
{
while (bThreadRun1)
{
try {
Thread.sleep(500);
if (c1 > ((1<<31)-1))
{
c1 = 0;
}
else
{
c1 += 100;
}
Message message = new Message();
message.what = 1;
myHandler1.sendMessage(message);
}
catch (InterruptedException ex)
{
//Do some exception processing.
}
}
Message message1 = new Message();
message1.what = 2;
myHandler1.sendMessage(message1);
}
}
private Handler myHandler1 = new Handler()
{
public void handleMessage(Message msg)
{
switch (msg.what)
{
case 1:
button2.setText("thread1 running..." + c1);
break;
case 2:
button2.setText("thread1 stopped.");
break;
}
}
};
public void OnclickBtn2(View btn)
{
//Start a custom thread
if (!bThreadRun1)
{
myThread1 = new MyThread1();
new Thread(myThread1).start();
bThreadRun1 = true;
}
else
{
bThreadRun1 = false;
}
}
public void OnclickBtnBack(View btn)
{
//Close this Activity
TestThread.this.finish();
}
public void OnclickBtnAsync(View btn)
{
Intent v_intent = new Intent();
v_intent.setClass(TestThread.this, TestAsync.class);
startActivity(v_intent);
}
private void showResult()
{
Toast.makeText(TestThread.this, "This is in TestThread activity", Toast.LENGTH_SHORT).show();
}
}