2013-08-03 2 views
1

나는 살아 서비스를 유지하기 위해 다음 코드를 사용 :낮은 메모리 부족 상태에서도 서비스를 유지하는 것이 올바른 방법입니까?

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    ... 
    keepServiceAlive(this, 2222); 
    return super.onStartCommand(intent, flags, startId); 
} 
@SuppressWarnings("deprecation") 
public void keepServiceAlive(Service service, int id) { 
    Notification note = new Notification(0, null, System.currentTimeMillis()); 
    note.flags |= Notification.FLAG_NO_CLEAR;   
    service.startForeground(id, note); 
} 

을하지만 가끔은 서비스는 여전히 살해되고 있었다. 이 코드 조각의 정확성을 확인하도록 도와 주시겠습니까? 아니면 더 나은 솔루션을 제공하겠습니까?

답변

1

형식이 잘못된 Notification 개체를 만들지 않아야합니다. Android 4.3은 사용자가이 해킹을 감지하면 자신의 Notification임을 보여주고 사용자에게 서비스가 실행 중임을 알립니다. 포 그라운드에 실제로 있어야하는 경우 적절한 아이콘을 지정하고 사용자에게 서비스에 대해 알리고 필요한 이유를 설명하십시오. SharedPreferences를 통해 서비스를 전경 서비스로 실행할지 여부를 결정할 수도 있습니다.

this blog post by CommonsWare

+0

의미가 있습니다. 그러나 여기에서 핵심적인 문제는 : 귀하의 제안이 저 기억력을 발휘할 수있는 더 많은 기회를 제공 할 것인가? – JackWM

+0

'startForeground()'가 아마도 당신이 할 수있는 최선일 것입니다. 만약 당신이 진짜로 * 원할 경우 반복적 인 알람을 실행하여 서비스를 시작할 의도가 생기면 살해 당하면 다음 알람에서 다시 시작될 것입니다. 나는 사용자가 정말로 꺼야 할 것이거나 그렇게 오래 가지 않기를 원하는 것이기 때문에 당신이 정말로 이것을해야한다는 것을 진지하게 생각할 것입니다. – Karakuri