我正在创建一个进程中的UWP应用程序服务,以及另一个(桌面)客户端程序,它通过应用程序服务与应用程序进行通信。客户端程序想知道UWP应用程序当前是否正在运行(在前台),在桌面应用程序打开AppServiceConnection之前是否已经在后台运行,是否被挂起,或者根本没有运行。换句话说,应用程序需要能够通过应用程序服务传递它在生命周期中的位置。
除了实现我自己的状态变量之外,是否有任何方法以编程方式检测应用程序的生命周期状态,每当引发相关事件时,我都会更新该变量?这似乎是可能的,但我找不到它的API。显然,它永远不会告诉您您当前正在挂起或不运行,但是能够区分“除此应用程序服务任务外的挂起”和“在前台积极运行”将是有用的。
发布于 2017-10-02 05:28:12
客户端程序想知道UWP应用程序是否正在运行(在前台),在桌面应用程序打开AppServiceConnection之前它已经在后台运行了。
在桌面应用程序打开AppServiceConnection连接之前,客户端不应该能够与应用服务提供商通信,因为UWP应用程序是沙箱。获取应用程序服务提供者的当前状态,它对客户端应用程序没有任何用处。如果客户端桌面应用程序是.NET框架,则可以尝试使用Process.Responding属性获取服务提供者进程状态。例如,如果Process.Responding为真,那么服务提供者“在前台积极运行”,如果它是假的,则应该暂停提供程序,如果无法找到提供程序进程,则应该终止它。
static void Main(string[] args)
{
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
if (process.ProcessName == "AppServicesProvider")
Console.WriteLine("Process Name: {0}, Responding: {1}", process.ProcessName, process.Responding);
}
Console.ReadLine();
}换句话说,应用程序需要能够通过应用服务传递它生命周期中的位置。
如果您的意思是通过应用程序服务,当应用程序的执行状态发生变化时,您提到的在app数据中存储状态的方式应该很好。您似乎不想使用它,但实际上触发的状态匹配事件句柄表示应用程序的执行状态发生了变化。
private async void App_Suspending(object sender, SuspendingEventArgs e)
{
SuspendingDeferral deferral = e.SuspendingOperation.GetDeferral();
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["currentlife"] = "Suspended";
deferral.Complete();
}
private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
{
var messageDeferral = args.GetDeferral();
Windows.Storage.ApplicationDataContainer localSettings =Windows.Storage.ApplicationData.Current.LocalSettings;
Object value = localSettings.Values["currentlife"];
try
{
var input = args.Request.Message;
//Create the response
var result = new ValueSet();
result.Add("result", value);
//Send the response
await args.Request.SendResponseAsync(result);
}
finally
{
//Complete the message deferral so the platform knows we're done responding
messageDeferral.Complete();
}
}https://stackoverflow.com/questions/46478681
复制相似问题