Android 如何确定应用程序何时运行?
我有一个应用程序,在应用程序运行和不运行时都使用服务在后台获取数据。 当它不运行时,我希望在有新数据时显示通知,但在应用程序运行时不显示通知Android 如何确定应用程序何时运行?,android,Android,我有一个应用程序,在应用程序运行和不运行时都使用服务在后台获取数据。 当它不运行时,我希望在有新数据时显示通知,但在应用程序运行时不显示通知 如何在我的服务中确定应用程序是否正在运行?我想您需要检查是否显示了特定的活动。如果这是真的,我将使用Activity.onCreate()方法在应用程序实例中设置一个标志,即使用字段“uiRunning”扩展类应用程序,并在服务中检查该字段。onDestroy()应用于取消该属性的延迟。不要忘记在Manifest.xml中也使用您的应用程序类,我同意对单个
如何在我的服务中确定应用程序是否正在运行?我想您需要检查是否显示了特定的活动。如果这是真的,我将使用Activity.onCreate()方法在应用程序实例中设置一个标志,即使用字段“uiRunning”扩展类应用程序,并在服务中检查该字段。onDestroy()应用于取消该属性的延迟。不要忘记在Manifest.xml中也使用您的应用程序类,我同意对单个活动应用程序使用onCreate()/onDestroy(),尽管具有多个活动的应用程序最好使用Application.onCreate()/onTerminate()以避免在切换活动时触发uiRunning状态 这太容易了。您使用一个命名的互斥体 将其放入要检查的应用程序中:
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");
}
另一个选项是实现侦听器模式,并让您的服务使用addListener()和RemovelListener()的服务接口上的方法管理侦听器列表。您的活动可以在连接到服务后将自身添加为侦听器,并在top()上删除自身(即,当应用程序不再对用户可见或已完全关闭时)
在您的服务中,检查侦听器的数量。如果没有侦听器,那么您知道应该创建通知。另一种方法是将数据接收器与始终在后台运行的“服务”分离。您可以将应用程序绑定到服务,并显示服务获取的数据
将应用程序放在后台的问题是,一旦应用程序太旧,Android就会杀死它。让这样的后台应用程序作为服务而不是活动运行总是更好的。我所做的是在我的服务中使用一个标志,根活动在启动/启动时设置和清除。这非常好。我就是这样做的,只需几行代码就可以完美地工作: 在扩展应用程序类中:
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;
}
在正常的系统操作中,Application.onTerminate()永远不会被终止——当后台进程需要内存时,它只会被终止。不,它只是被终止,这只是为了模拟。。应用程序没有用于通知其将被终止的调用。不需要使用应用程序子类——只需在这些方法设置的服务中添加一个静态变量(或调用维护内部静态状态的静态函数)。同样对于应用程序对象,也不能保证Activity.onDestroy()会被终止——如果系统需要进程的内存,它只会终止进程,并且不会在其中运行任何代码。我唯一的想法也是这样。我希望在某个地方有一种跑步的方法。我可以使用在不同时间运行不同活动的应用程序,这将使保持标志同步更加复杂。我想我应该在onStart/onStop中设置/删除标志?这是.net代码,不是吗?除此之外,我同意互斥也会这样做。