用于递归更新的Android延迟检查
我相信我可能是用错误的方法来解决这个问题,或者我没有正确地编码它。我接到许多要求更新的电话。有时我会在几个小时内得到更新检查。此函数是我的更新函数,它每隔一段时间调用一次以检查更新,除非没有internet,并且延迟并重试四个小时。我不知道我是不是在拖延时间?我需要更新功能每24小时检查和重新检查一次,无论它是否发现更新。它必须每24小时尝试一次,除非它在24小时没有互联网,并且应该在4小时后重试。我做得对吗用于递归更新的Android延迟检查,android,recursion,delay,Android,Recursion,Delay,我相信我可能是用错误的方法来解决这个问题,或者我没有正确地编码它。我接到许多要求更新的电话。有时我会在几个小时内得到更新检查。此函数是我的更新函数,它每隔一段时间调用一次以检查更新,除非没有internet,并且延迟并重试四个小时。我不知道我是不是在拖延时间?我需要更新功能每24小时检查和重新检查一次,无论它是否发现更新。它必须每24小时尝试一次,除非它在24小时没有互联网,并且应该在4小时后重试。我做得对吗 private final Runnable mUpdateUI = new Runn
private final Runnable mUpdateUI = new Runnable()
{
public void run()
{
if (isNetworkAvailable()== true)
{
try
{
new checkupdate().execute();
mHandler.postDelayed(mUpdateUI, 86400000);
Toast.makeText(MainActivity.this, "Daily update check!", Toast.LENGTH_LONG).show();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
{
mHandler.postDelayed(mUpdateUI, 21600000);
Toast.makeText(MainActivity.this, "No internet for Daily update check, try again in little!", Toast.LENGTH_LONG).show();
}
}
}
) 试试这个:
private Handler mHandler;
private int delayTime;
private final Runnable mUpdateUi = new Runnable(){
@Override
public void run(){
check();
}
};
private void start(){
new Thread(
new Runnable(){
@Override
public void run(){
Looper.prepare();
mHandler = new Handler();
check();
Looper.loop();
}
}
).run();
}
private void check(){
if (isNetworkAvailable()== true){
try {
new checkupdate().execute();
delayTime = 86400000;
Toast.makeText(MainActivity.this, "Daily update check!", Toast.LENGTH_LONG).show();
}
catch (IOException e) {
e.printStackTrace();
delayTime = 21600000;
}
}else{
delayTime = 21600000;
Toast.makeText(MainActivity.this, "No internet for Daily update check, try again in little!", Toast.LENGTH_LONG).show();
}
reCheck()
}
private void reCheck(){
mHandler.postDelayed(mUpdateUI, delayTime);
}
如果不想在后台运行,只需跳过新的Thread()部分。这样,您只需调用start()一次,瞧 如果像我现在使用onCreate函数中的原始代码那样调用这个函数,会有问题吗?不会每次我从恢复或关闭程序时,它都会调用更新函数,现在我会在后台运行两个或三个…etc更新函数。理想情况下,每24小时检查一次。那么我把这个叫做什么呢?或者我需要一些catch来检查它是否已经在运行吗?我以前使用这个命令从onCreate调用过它。mHandler.post(mUpdateUI);那么使用start()来代替吗?我在考虑把这个代码转移到另一个类,这会有问题吗?我发现你的循环器有一个错误,它说它一次只能运行一个循环器。我无法启动应用程序,否则它不会使主要活动膨胀。我正在运行另一个处理程序,并可运行另一个函数。我该怎么办?我以前没有这个问题。如果你不从新线程调用,活套部分会给你错误。如果此任务用于更新数据,我建议您将其从活动中取出并放入intent服务中,因为正如您所说,当您的活动进行时,此任务将重新启动,但也可能会被itI破坏。我正在尝试将代码放入服务中,如果您得到更改,可能会在另一篇文章中帮助我。谢谢你!