在 Android 中每 10 秒显示一次数据
Posted
技术标签:
【中文标题】在 Android 中每 10 秒显示一次数据【英文标题】:display data after every 10 seconds in Android 【发布时间】:2011-02-01 21:44:06 【问题描述】:我必须每 10 秒后显示一些数据。谁能告诉我该怎么做?
【问题讨论】:
@Farha,希望我的回答对您有所帮助。 【参考方案1】:有一种简单的方法可以在每 10 秒后显示一些数据。
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launcher);
ActionStartsHere();
public void ActionStartsHere()
againStartGPSAndSendFile();
public void againStartGPSAndSendFile()
new CountDownTimer(11000,10000)
@Override
public void onTick(long millisUntilFinished)
// Display Data by Every Ten Second
@Override
public void onFinish()
ActionStartsHere();
.start();
【讨论】:
【参考方案2】:使用Handler还有另一种方式
final int intervalTime = 10000; // 10 sec
Handler handler = new Handler();
handler.postDelayed(new Runnable()
@Override
public void run()
//Display Data here
, intervalTime);
【讨论】:
【参考方案3】:每 10 秒自动刷新您的应用屏幕或 Activity 刷新
在我尝试过的 onCreate() 方法中创建此代码对我有用
Thread t = new Thread()
@Override
public void run()
try
while (!isInterrupted())
Thread.sleep(1000);
runOnUiThread(new Runnable()
@Override
public void run()
//CALL ANY METHOD OR ANY URL OR FUNCTION or any view
);
catch (InterruptedException e)
;t.start();
【讨论】:
这是不正确的方法在这里检查我的回答你的 ui 线程正在等待,这就是为什么你的应用程序可能会进入无响应模式 我想自动调用 url 和方法或者我该怎么做【参考方案4】:您还可以使用另一种方法在特定时间间隔内更新 UI。以上两个选项都是正确的,但取决于情况,您可以使用其他方式在特定时间间隔更新 UI。
首先声明一个全局变量供 Handler 从 Thread 更新 UI 控件,如下所示
Handler mHandler = new Handler();
现在创建一个 Thread 并使用 while 循环使用线程的 sleep 方法定期执行任务。
new Thread(new Runnable()
@Override
public void run()
// TODO Auto-generated method stub
while (true)
try
Thread.sleep(10000);
mHandler.post(new Runnable()
@Override
public void run()
// TODO Auto-generated method stub
// Write your code here to update the UI.
);
catch (Exception e)
// TODO: handle exception
).start();
【讨论】:
不能引用在不同方法中定义的内部类中的非最终变量 mHandlermHandler
的修饰符应改为final
。【参考方案5】:
Andrahu 在定义处理程序方面走在了正确的轨道上。如果您有一个调用更新函数的处理程序,您可以简单地将delay the message 发送到处理程序 10 秒。
通过这种方式,您不需要启动自己的线程或类似的东西,这会导致奇怪的错误、调试和维护问题。
只要打电话:
Handler myHandler = new MyUpdateHandler(GUI to refresh); <- You need to define a own handler that simply calls a update function on your gui.
myHandler.sendMessageDelayed(message, 10000);
现在您的 handleMessage 函数将在 10 秒后被调用。您可以在更新函数中发送另一条消息,导致整个周期一遍又一遍地运行
【讨论】:
【参考方案6】:可能最简单的做法是:
while(needToDisplayData)
displayData(); // display the data
Thread.sleep(10000); // sleep for 10 seconds
您也可以使用计时器:
int delay = 1000; // delay for 1 sec.
int period = 10000; // repeat every 10 sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
public void run()
displayData(); // display the data
, delay, period);
【讨论】:
Lirik,您的第一个解决方案会引发 ANR,这绝对是不可取的。如果您提到 timer.scheduleAtFixedRate 是否会为要执行的任务创建一个新线程或使用调用它的同一线程,那就更好了。 第一个冻结 ui,第二个抛出 ex:java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
以上是关于在 Android 中每 10 秒显示一次数据的主要内容,如果未能解决你的问题,请参考以下文章