我有一个应用程序,它使用服务在应用程序运行时和不运行时在后台获取数据。 当它没有运行时,我希望在有新数据时显示通知,但在应用程序运行时则不显示。
如何在我的服务中确定应用程序是否正在运行?
答案 0 :(得分:1)
我想您要检查是否显示某项活动。如果是这样,我将使用Activity.onCreate()方法在应用程序实例中设置一个标志,即使用字段“uiRunning”扩展类Application并在服务中检查此字段。应使用onDestroy()取消标记属性。不要忘记在Manifest.xml中使用Application类
答案 1 :(得分:0)
我同意对单个Activity应用程序使用onCreate()/ onDestroy(),尽管使用Application.onCreate()/ onTerminate()可以更好地使用多个活动的应用程序,以避免触发uiRunning切换活动时的状态。
答案 2 :(得分:0)
这很容易。您使用名为Mutex。
将它放在您要检查的应用程序中:
bool createdNew;
Mutex mutex = new Mutex(true, @"Global\YourAppNameHere", out createdNew);
if (createdNew)
{
var app = new YourProcess();
app.run();
mutex.Close();
}
将其放入检查以确保其他应用正在运行的应用程序中:
bool createdNew;
Mutex mutex = new Mutex(true, @"Global\YourAppNameHere", out createdNew);
if (createdNew)
{
Console.WriteLine("App not running");
mutex.Close();
} else {
Console.WriteLine("App is running");
}
答案 3 :(得分:0)
另一种选择是实现一个侦听器模式,并让您的服务使用服务接口上的方法管理一个监听器列表,用于addListener()和removeListener()。您的活动可以在连接到服务后将其自身添加为侦听器并将其自身移除onStop()(即,当应用程序不再对用户可见或完全关闭时)。
在您的服务中,检查侦听器的数量。如果没有听众,那么您知道应该创建通知。
答案 4 :(得分:0)
另一种实现方法是将数据接收器与一个始终在后台运行的“服务”分离。您可以将应用程序绑定到服务,并显示服务提取的数据。
在后台运行应用程序的问题是Android会在应用程序太旧时终止它。将这样的后台运行应用程序作为服务而不是活动总是更好。
答案 5 :(得分:0)
我所做的是在我的服务中使用一个标志,root活动在onStart / onStop上设置和清除。这非常有效。
答案 6 :(得分:0)
我就是这样做的,只需几行代码即可完美运行:
在扩展的App类中:
public static boolean isAppInFront = false;
在你的主要活动中:
@Override
public void onStart() {
super.onStart();
MyApplication.isAppInFront = true;
}
@Override
public void onStop() {
super.onStop();
if (isFinishing())
MyApplication.isAppInFront = false;
}