想咨询下安卓应用开发,后台保持数据持续刷新的方法

我在写一个app,是想实现每隔一段时间自动从网站获取数据,并显示在主界面上,并且当有异常数据时,会发送消息通知的功能。
现在我是在onCreate里面写了一个task,task里面设置了子线程,用来从网站调用数据,task里面设置了延迟时间。
现在的结果是,好像只有当打开应用,保持app界面在手机主屏幕时候,自动获取和消息通知的功能正常。
当锁屏,返回到手机主界面的时候,自动刷新就不正常了。表现为,有时候只会自动刷新一次或两次。当我间隔很长时间,再点击打开app的时候,会自动刷新一次。
我在手机上将这个app设为后台锁定了,也添加了自启动。
这个是否是因为锁屏或者返回主界面后,activity就处于休眠的状态呢?

这应该是安卓保活,安卓杀后台太严重,一般方法很难,service用了吗
或者把应用添加到后台常驻

对于需要后台运行的任务,建议使用前台服务;如果对时间不要求绝对精准,用WorkManager是最合适的,不过WorkManager在国内厂商不太好使。

【以下回答由 GPT 生成】

这个问题是因为Android系统会在应用进入后台或者屏幕关闭时进入休眠状态,从而导致你的自动刷新功能不正常。解决这个问题的方法是使用后台服务(Background Service)来保持你的数据持续刷新。

首先,你需要创建一个后台服务类来执行你的刷新任务。可以继承自Service类,然后在onStartCommand方法中编写你的刷新逻辑。这样即使应用进入后台或者屏幕关闭,服务仍然会在后台持续执行。

public class RefreshService extends Service {

    private Handler handler;
    private Runnable runnable;

    @Override
    public void onCreate() {
        super.onCreate();
        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                // 在这里编写你的数据获取和刷新逻辑
                // 例如从网站获取数据,并在主界面上显示
                // 判断异常数据并发送通知
                handler.postDelayed(this, interval); // 设置下一次刷新的延迟时间
            }
        };
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        handler.post(runnable);
        return START_STICKY; // 这样当服务被系统回收后会尝试重新创建
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        handler.removeCallbacks(runnable);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

接下来,在你的MainActivity中启动这个后台服务。可以在onCreate方法中启动,这样应用打开时服务就会自动启动。可以在onStop方法中停止服务,这样应用在后台运行或者退出时服务也会相应停止。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        startService(new Intent(this, RefreshService.class));
    }

    @Override
    protected void onStop() {
        super.onStop();
        stopService(new Intent(this, RefreshService.class));
    }
}

最后,记得在AndroidManifest.xml文件中注册你的服务。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourpackage">

    <application ...>

        <service android:name=".RefreshService" />

        ...

    </application>

</manifest>

这样你的应用就可以在后台持续刷新数据,并在有异常数据时发送消息通知,不再受手机锁屏或返回主界面的影响。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

Android中有四大组件,这里你要实现的功能,可以通过Service组件完成。

使用前台服务,优先级比较高,不会被杀

img


后台处理指南  |  Android 开发者  |  Android Developers https://developer.android.google.cn/guide/background?hl=zh-cn

在移动端实现这个已经不太可能了。
有一个方案是:
在服务器上写任务获取数据,在获取到标点数据时给APP推送。
APP只在打开的时候主动获取,APP关闭之后服务器脚本运行,APP主动获取之后,脚本暂停一个周期
APP推送可以接入手机厂商推送

用JS实现刷新页面后保留刷新前的页面上的数据显示


刷新页面_用JS怎么实现刷新页面后保留刷新前的页面上的数据显示 例如流量统计此类页面,刷新后页面会重新获取一次新的流量值,我想保留并读取刷新前的数据,这个要怎么实现,用JS页面本身是不具备保存历史数据的功能的,需要借助其它手段来实现,常用方法如下:异步更新页面。这种方法实际上页面是没有刷新的,通过AJAX导步获取信息来更新页面,这样可以保留原页面需要保留的数据。一些网站的发表评论后,评论内容更新,用的就是这个方法。使用COOKIE保存。把需要保存的数据存储到COOKIE中,页面更新时,读取COOKIE渲染到页面上。比较常见的如:登录框记录用户名,下次登录无须 https://it.cha138.com/java/show-6457308.html

估计别Android杀后台了,建议使用前台服务,优先级高,一般不会被杀

你可以使用定时任务库,如AlarmManager或JobScheduler(在Android 5.0及以上版本),来定期执行你的任务。或者创建一个后台服务来执行你的任务。后台服务可以在设备处于锁屏或者应用处于后台状态时继续运行

参考newbing

  1. 使用AlarmManager:AlarmManager是Android提供的一种机制,可以在指定的时间间隔内触发指定的操作。你可以使用AlarmManager来定期触发获取数据的任务。这样即使应用处于后台或锁屏状态,系统也会在指定时间间隔内唤醒应用执行任务。

  2. 使用JobScheduler:JobScheduler是Android提供的一种任务调度器,可以在指定的条件下执行任务。你可以使用JobScheduler来设置一个周期性的任务,以固定的时间间隔获取数据。JobScheduler会自动处理系统的资源管理和电池寿命,确保任务在合适的时候执行。

  3. 使用WorkManager:WorkManager是Android Jetpack组件库中的一部分,可以用于处理延迟执行和周期性执行的后台任务。你可以使用WorkManager来执行获取数据的任务,并设置合适的重复间隔。