2014-02-18 3 views
1

Update:I've changed some things and better clarified my question here.App закрываются в фоновом режиме

Этот вопрос может быть закрыт.


Краткое примечание: я кодирования это в C# с Xamarin, но любое решение для регулярного Java и Android должны применяться, так что не волнуйтесь, если ваш ответ не является специфичным для C# или Xamarin.

У меня проблема, когда мое приложение Android закрывается на меня, когда экран выключен, и обычно он делает это менее чем за минуту. Он продолжает работать, когда приложение открыто, поэтому, возможно, оно имеет какое-то отношение к тому, как андроид обрабатывает мое приложение, когда оно не используется. Это не происходит, когда я отлаживаю приложение в среде IDE, хотя, поскольку это, вероятно, поддерживает приложение, поэтому я не получаю от этого никакой помощи.

Приложение состоит из нескольких видов деятельности и обслуживания. Служба отправляет и принимает данные, используя tcp-соединение. Когда приложение открывается, оно начинается с активности входа в систему. Затем, когда вы входите в систему, он завершает эту активность и открывает основную активность. Основная активность запускает сервис в OnResume с StartService (new Intent (this, typeof(MainService)));.

Служба является передним планом.

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, когда приложение закрыто. Это плохо, потому что служба должна работать правильно в течение длительных периодов времени.

+0

Это нормальное поведение в жизненном цикле. Когда активность не видна, она является кандидатом на убийство (услуги гораздо реже прекращаются). Когда вы возобновляете его (после того, как его убили), onCreate поэтому вызывается снова, поэтому вам нужно выполнить это. – NigelK

+0

Проблема в том, что служба больше не работает, чем активность. Предполагается, что служба работает в фоновом режиме, но она выполняется и теряет соединение. –

ответ

0

Убедитесь, что вы запускаете службу через startService, а не только bindService. Если вам нужен связанный сервисный вызов startService, чтобы он работал дольше, чем связанная с ним вещь. Вы уже упоминали, что вы используете его как услугу переднего плана, это хорошо. Наконец, если ни одна из этих проблем не решит проблему, запустите службу в ее собственном процессе, добавив в декларацию манифеста для службы объявление «:».

Смежные вопросы