在应用程序/任务级别获取onPause&onResume像事件一样

我想知道当应用程序进入后台并进入前台时,在应用程序级别没有callback的原因是什么。 Activity类的onPauseonResume只在当前顶级活动上调用。 如果我想停止一些具有应用程序级别范围的后台任务,那么在应用程序转到后台时,我可以阻止它。 这些事件callback有很高的需求。

为什么Android没有应用程序级别的callback暂停和恢复应用程序? 如果不是在应用程序级别,它可以在任务(活动堆栈)级别在Android中实现吗?

真正的问题:

背景Timertask定期刷新来自Web的数据。 当应用程序不再处于前台时,我想停止它。

目前我正在重复的代码在一个BaseActivity 。 这是在活动层面。 任务停止并开始每个活动的每个暂停和恢复,并且应用程序转到bg或来到fg的事件隐藏在这些事件之一中,这是我不知道的。 我想知道是否有更好的方法,我的意思是知道应用何时停止对用户可见。

Solutions Collecting From Web of "在应用程序/任务级别获取onPause&onResume像事件一样"

使用处理程序而不是TimerTask。 如果活动未激活,则绑定到活动Looper的Handler的定时消息将不会被触发。

该模式将发送一个定时的消息到处理程序,然后产生一个线程/ AsyncTask将在后台执行请求,并更新用户界面。 在线程创build/销毁方面有一点点开销,但是无论如何这都是I / O绑定。 如果这个开销变成了bototleneck,你可以创build一个线程池(虽然我怀疑是否会)。

如果您确实想知道应用程序何时不在前台,则可以在两个活动之间的onStop / onResume中使用重叠。 当从A-> B时,B的onResume将在A的onStop之前被调用。 因此,您可以在onResume中增加一个全局计数器,并在onStop中将其减1。 当且仅当没有活动可见时,该计数器将变为0。 为了分析目的,我成功地使用了此function来跟踪精确访问。 尽pipe如此,它确实需要一个通用的基类。

你在谈论android.app.Application类吗? 在开始某个活动或服务之前,应用程序启动时会创build一个应用程序,只要应用程序保留在内存中,应用程序就会一直运行。

你可以扩展这个应用程序,并把一些全球性的数据。 在<application android:name =“。YourApp”>清单中指定扩展类的名称。

现在你应该明白,这样的应用程序不会去前景或背景,只有活动可以。 但是,从您的Activity中,您可以调用getApplication来获取您的单个Application实例(使用投射),并调用与焦点更改有关的自己的方法,从而了解整个应用程序是处于前景还是后台,并根据需要运行。

而且Service还有getApplication()方法,它接收相同的Application对象。

大多数开发人员可能没有意识到他们可以拥有单个Application对象来保存所需的应用程序数据,而不仅仅是一堆活动和服务。

如果你想做一些具有应用程序级别范围的后台任务,那么你应该在服务上启动一个新线程来为你完成这个任务。

该服务是独立于任何活动,所以将继续运行你的任务线程,直到你停止它。