我有一个应用程序,使用服务在后台获取数据,无论应用程序是否正在运行。
当应用程序未运行时,我希望在有新数据时显示通知,但是当应用程序正在运行时不显示通知。
如何在我的服务中确定应用程序是否正在运行?
我有一个应用程序,使用服务在后台获取数据,无论应用程序是否正在运行。
当应用程序未运行时,我希望在有新数据时显示通知,但是当应用程序正在运行时不显示通知。
如何在我的服务中确定应用程序是否正在运行?
我认为您想要检查某个活动是否正在显示。如果是这样,我会使用Activity.onCreate()方法在应用程序实例中设置一个标志,即通过扩展Application类来添加一个名为"uiRunning"的字段,并在您的服务中检查此字段。onDestroy()应该用于取消标记属性。不要忘记在Manifest.xml中也使用您的Application类。
这很简单。您可以使用命名 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");
}
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;
}
另一种实现的方法是将数据接收器解耦为一个“服务”,该服务将始终在后台运行。您可以让应用程序绑定到该服务,并显示由服务获取的数据。
将应用程序放在后台的问题是,Android会在它变得太旧时杀死该应用程序。最好将这样的后台运行应用程序作为服务而不是活动。