I'm trying to test UI and Timer class possibilities. So I tried the following exercise:
=== TestTimerActivity.java ===
package com.tvt.TestTimer;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
public class TestTimerActivity extends Activity {
TextView _tv;
Timer _t;
int _count = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//
// _tv = (TextView) getWindow().getDecorView().findViewById( R.id.TextViewTime );
_tv = (TextView) findViewById( R.id.TextViewTime );
UpdateTime(); // Completes OK
_t = new Timer();
_t.scheduleAtFixedRate( new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
_count++;
UpdateTime(); // Fails
}
}, 1000, 1000 );
}
protected void UpdateTime() {
_tv.setText( "" + _count );
}
}
=== TestTimerActivity.java ===
=== main.xml ===
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:gravity="center_horizontal" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@string/header" android:id="@+id/TestViewHeader" android:textStyle="bold"/>
<TextView android:layout_height="wrap_content" android:id="@+id/TextViewTime" android:layout_width="match_parent" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:text="-"></TextView>
</LinearLayout>
=== main.xml ===
The very first UpdateTime call (from onCreate) completes OK but the same call from TimerTask::run() fails giving the message "TestTimer class has stopped unexpectedly".
Any idea? Where is my fault?
--
SY, TVT
Do that UpateTime() operation on the UI thread.
protected void UpdateTime()
{
runOnUiThread(new Runnable()
{
public void run()
{
_tv.setText( "" + _count );
}
});
}
Hopefully resolves your problem.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With