I'm new to Android and I'm trying to use the UI-Thread, so I've written a simple test activity. But I think I've misunderstood something, because on clicking the button - the app does not respond anymore
public class TestActivity extends Activity {
Button btn;
int i = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
runThread();
}
});
}
private void runThread(){
runOnUiThread (new Thread(new Runnable() {
public void run() {
while(i++ < 1000){
btn.setText("#"+i);
try {
Thread.sleep(300);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}));
}
}
You have it back-to-front. Your button click results in a call to
runOnUiThread()
, but this isn't needed, since the click handler is already running on the UI thread. Then, your code inrunOnUiThread()
is launching a new background thread, where you try to do UI operations, which then fail.Instead, just launch the background thread directly from your click handler. Then, wrap the calls to
btn.setText()
inside a call torunOnUiThread()
.This is how I use it: