App在背景中被关闭

时间:2014-02-18 16:34:39

标签: c# java android .net xamarin

更新: I've changed some things and better clarified my question here.

这个问题可以关闭。


快速说明:我使用Xamarin在C#中对此进行编码,但是常规Java和Android的任何解决方案都应该适用,所以如果您的响应不是特定于C#或Xamarin,请不要担心。 < / p>

我遇到一个问题,我的Android应用程序在屏幕关闭时被关闭,而且通常在不到一分钟的时间内关闭。它在应用程序打开时继续运行,所以它可能与android在不使用时处理我的应用程序的方式有关。但是,当我在IDE中调试应用程序时,它不会发生,因为这可能使应用程序保持活动状态,所以我没有得到任何帮助。

该应用程序包含一些活动和服务。该服务使用tcp连接发送和接收数据。打开应用程序时,它将以Login Activity启动。然后,当您登录时,它将完成该活动并打开主活动。主要活动使用StartService (new Intent (this, typeof(MainService)));在OnResume中启动服务。

服务是一项前台服务。

public override StartCommandResult OnStartCommand (Intent intent, StartCommandFlags flags, int startId)
{
    base.OnStartCommand (intent, flags, startId);

    ...

    var ongoingNotification = new Notification (Resource.Drawable.icon, "Service running");
    var pendingIntent = PendingIntent.GetActivity (this, 0, new Intent (this, typeof(MainActivity)), 0);
    ongoingNotification.SetLatestEventInfo (this, "Service", "The service is running.", pendingIntent);
    StartForeground ((int)NotificationFlags.ForegroundService, ongoingNotification);
    return StartCommandResult.RedeliverIntent;
} 

正在关闭时运行的应用程序部分是主要活动和服务。

当我尝试重新打开应用程序时,似乎它尝试重新打开主要活动,但随后失败并关闭。然后当我再次尝试重新打开应用程序时,它会将应用程序打开回登录活动。

尽管在关闭应用程序时丢失了tcp连接,但“服务正在运行”通知仍会一直保留在通知栏中。这并不好,因为服务需要长时间正常工作。

1 个答案:

答案 0 :(得分:0)

确保通过startService启动服务,而不仅仅是bindService。如果你需要绑定服务调用startService,那么它运行的时间长于绑定它的东西。您已经提到过将其作为前台服务运行,这很好。最后,如果没有一个能为您解决问题,请在其自己的流程中添加&#34;:&#34;在服务的清单声明中。