android计时器教程,如何在Android中设置计时器?

有人可以举一个简单的例子来说明每秒更新文本字段吗?

我想做一个飞行球,并且需要每秒计算/更新球坐标,这就是为什么我需要某种计时器的原因。

我从这里什么都没得到。

#1楼

如果您还需要在UI线程(而不是计时器线程)上运行代码,请访问博客: http : //steve.odyfamily.com/?p=12

public class myActivity extends Activity {

private Timer myTimer;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main);

myTimer = new Timer();

myTimer.schedule(new TimerTask() {

@Override

public void run() {

TimerMethod();

}

}, 0, 1000);

}

private void TimerMethod()

{

//This method is called directly by the timer

//and runs in the same thread as the timer.

//We call the method that will work with the UI

//through the runOnUiThread method.

this.runOnUiThread(Timer_Tick);

}

private Runnable Timer_Tick = new Runnable() {

public void run() {

//This method runs in the same thread as the UI.

//Do something to the UI thread here

}

};

}

#2楼

void method(boolean u,int max)

{

uu=u;

maxi=max;

if (uu==true)

{

CountDownTimer uy = new CountDownTimer(maxi, 1000)

{

public void onFinish()

{

text.setText("Finish");

}

@Override

public void onTick(long l) {

String currentTimeString=DateFormat.getTimeInstance().format(new Date());

text.setText(currentTimeString);

}

}.start();

}

else{text.setText("Stop ");

}

#3楼

如果有人感兴趣,我将开始创建一个标准对象以在活动UI线程上运行。 似乎工作正常。 欢迎发表评论。 我希望可以将其作为组件拖放到活动上,以在布局设计器上使用。 不能相信这样的东西还不存在。

package com.example.util.timer;

import java.util.Timer;

import java.util.TimerTask;

import android.app.Activity;

public class ActivityTimer {

private Activity m_Activity;

private boolean m_Enabled;

private Timer m_Timer;

private long m_Delay;

private long m_Period;

private ActivityTimerListener m_Listener;

private ActivityTimer _self;

private boolean m_FireOnce;

public ActivityTimer() {

m_Delay = 0;

m_Period = 100;

m_Listener = null;

m_FireOnce = false;

_self = this;

}

public boolean isEnabled() {

return m_Enabled;

}

public void setEnabled(boolean enabled) {

if (m_Enabled == enabled)

return;

// Disable any existing timer before we enable a new one

Disable();

if (enabled) {

Enable();

}

}

private void Enable() {

if (m_Enabled)

return;

m_Enabled = true;

m_Timer = new Timer();

if (m_FireOnce) {

m_Timer.schedule(new TimerTask() {

@Override

public void run() {

OnTick();

}

}, m_Delay);

} else {

m_Timer.schedule(new TimerTask() {

@Override

public void run() {

OnTick();

}

}, m_Delay, m_Period);

}

}

private void Disable() {

if (!m_Enabled)

return;

m_Enabled = false;

if (m_Timer == null)

return;

m_Timer.cancel();

m_Timer.purge();

m_Timer = null;

}

private void OnTick() {

if (m_Activity != null && m_Listener != null) {

m_Activity.runOnUiThread(new Runnable() {

@Override

public void run() {

m_Listener.OnTimerTick(m_Activity, _self);

}

});

}

if (m_FireOnce)

Disable();

}

public long getDelay() {

return m_Delay;

}

public void setDelay(long delay) {

m_Delay = delay;

}

public long getPeriod() {

return m_Period;

}

public void setPeriod(long period) {

if (m_Period == period)

return;

m_Period = period;

}

public Activity getActivity() {

return m_Activity;

}

public void setActivity(Activity activity) {

if (m_Activity == activity)

return;

m_Activity = activity;

}

public ActivityTimerListener getActionListener() {

return m_Listener;

}

public void setActionListener(ActivityTimerListener listener) {

m_Listener = listener;

}

public void start() {

if (m_Enabled)

return;

Enable();

}

public boolean isFireOnlyOnce() {

return m_FireOnce;

}

public void setFireOnlyOnce(boolean fireOnce) {

m_FireOnce = fireOnce;

}

}

在活动中,我有以下onStart:

@Override

protected void onStart() {

super.onStart();

m_Timer = new ActivityTimer();

m_Timer.setFireOnlyOnce(true);

m_Timer.setActivity(this);

m_Timer.setActionListener(this);

m_Timer.setDelay(3000);

m_Timer.start();

}

#4楼

他是一个简单的解决方案,在我的应用程序中可以正常工作。

public class MyActivity extends Acitivity {

TextView myTextView;

boolean someCondition=true;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.my_activity);

myTextView = (TextView) findViewById(R.id.refreshing_field);

//starting our task which update textview every 1000 ms

new RefreshTask().execute();

}

//class which updates our textview every second

class RefreshTask extends AsyncTask {

@Override

protected void onProgressUpdate(Object... values) {

super.onProgressUpdate(values);

String text = String.valueOf(System.currentTimeMillis());

myTextView.setText(text);

}

@Override

protected Object doInBackground(Object... params) {

while(someCondition) {

try {

//sleep for 1s in background...

Thread.sleep(1000);

//and update textview in ui thread

publishProgress();

} catch (InterruptedException e) {

e.printStackTrace();

};

return null;

}

}

}

#5楼

这是一种简单可靠的方法...

将以下代码放入您的Activity中,当您的活动处于“恢复”状态时,将在UI线程中每秒调用一次tick()方法。 当然,您可以更改tick()方法以执行所需的操作,或被更改为或多或少被频繁调用。

@Override

public void onPause() {

_handler = null;

super.onPause();

}

private Handler _handler;

@Override

public void onResume() {

super.onResume();

_handler = new Handler();

Runnable r = new Runnable() {

public void run() {

if (_handler == _h0) {

tick();

_handler.postDelayed(this, 1000);

}

}

private final Handler _h0 = _handler;

};

r.run();

}

private void tick() {

System.out.println("Tick " + System.currentTimeMillis());

}

对于有兴趣的人,如果您的活动在报价周期内暂停和恢复,则必须使用“ _h0 = _handler”代码来避免两个计时器同时运行。

来源:oschina

链接:https://my.oschina.net/stackoom/blog/3207285

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值