Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于递归更新的Android延迟检查_Android_Recursion_Delay - Fatal编程技术网

用于递归更新的Android延迟检查

用于递归更新的Android延迟检查,android,recursion,delay,Android,Recursion,Delay,我相信我可能是用错误的方法来解决这个问题,或者我没有正确地编码它。我接到许多要求更新的电话。有时我会在几个小时内得到更新检查。此函数是我的更新函数,它每隔一段时间调用一次以检查更新,除非没有internet,并且延迟并重试四个小时。我不知道我是不是在拖延时间?我需要更新功能每24小时检查和重新检查一次,无论它是否发现更新。它必须每24小时尝试一次,除非它在24小时没有互联网,并且应该在4小时后重试。我做得对吗 private final Runnable mUpdateUI = new Runn

我相信我可能是用错误的方法来解决这个问题,或者我没有正确地编码它。我接到许多要求更新的电话。有时我会在几个小时内得到更新检查。此函数是我的更新函数,它每隔一段时间调用一次以检查更新,除非没有internet,并且延迟并重试四个小时。我不知道我是不是在拖延时间?我需要更新功能每24小时检查和重新检查一次,无论它是否发现更新。它必须每24小时尝试一次,除非它在24小时没有互联网,并且应该在4小时后重试。我做得对吗

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破坏。我正在尝试将代码放入服务中,如果您得到更改,可能会在另一篇文章中帮助我。谢谢你!