2011-11-07 3 views
3

물론 나는 여기에 해킹을하고있어 지식이 필요합니다.백그라운드 서비스에 더 좋은 것은 어느 것입니까? WakeLock 또는 startForeground

타이머를 카운트하는 다른 스레드에 연결된 백그라운드에서 실행되는 서비스가 있습니다. 잠시 후 카운트 다운에 문제가 있었으며 서비스 가비지 수집으로 인한 것으로 추정됩니다. 나는 startForeground를 사용하여이 문제를 해결 한 것으로 보인다. 이제 나는 wakelocks에 대해 읽었으며, 언제 다른 것을 사용할 지에 대한 모범 사례가 있습니까?

감사합니다.

답변

2

타이머를 카운트하는 다른 스레드에 연결된 백그라운드에서 실행되는 서비스가 있습니다.

AlarmManager을 사용하십시오. 따라서 시계 틱을 보는 것뿐만 아니라 실제로 작업을 수행 할 때 서비스가 메모리에 있어야합니다. Android에 대한 가장 큰 사용자 불만 중 하나는 개발자가 휴대 전화를 방해하는 이러한 모든 배경 지식입니다.

startForeground를 사용하여 문제를 해결 한 것으로 보이며 실제 배터리를 사용하지 않는 것 같습니다.

startForeground() 뒤에 점은 서비스가 지속적으로 서비스가 주변에 너무 오래 또는 메모리 부족 상태를 걸려으로 인해 회수하는 경우 사용자가 알 수 있도록, 사용자에게 가치를 제공하고 있음을 표시하는 출력입니다. 시계 틱에 앉아서 시청하는 것은 이 아니며이 아닌 "계속해서 사용자에게 가치를 전달합니다." AlarmManager을 사용하십시오. startForeground()이 필요하지 않습니다.

이제 wakelocks에 대해 읽어 보았습니다. 하나 또는 둘 다를 사용하는 데 대한 모범 사례가 있습니까?

WakeLock은 CPU의 전원을 켭니다 (화면과 같은 다른 것들도 가능). startForeground()과는 거의 관련이 없습니다. AlarmManager을 사용하는 경우 수행중인 작업에 따라 WakeLock을 사용해야 할 수도 있습니다.

+0

"startForeground() 뒤에있는 점은 서비스가 지속적으로 제공되고 있음을 나타냅니다. 값이 너무 길거나 메모리 부족으로 인해 서비스가 회수되었는지 사용자가 알 수 있도록하는 것입니다. 시계 틱에 앉아 시청하는 것은 "지속적으로 가치를 사용자에게 제공"하지 않습니다. AlarmManager를 사용하십시오. startForeground()가 필요 없습니다. " 맞지만, 나는 가속도계의 히트를 동시에 등록하고 독서를 할 때마다 시계를 재설정하고 있습니다. 그래서 나는 동시에 그것을 열 필요가있다. 나는 Alarm Manager를 살펴볼 것이다. – Jackie

+0

@Jackie : "같은 시간에 가속도계의 히트 수를 기록하고 독서를 할 때마다 시계를 다시 설정합니다."- 이것이 왜 서비스인지는 분명하지 않습니다. 센서를 사용하려고 할 때 장치의 전원을 항상 켜야합니다. 센서는 전경에서 사용하도록 설계되었습니다. 어쨌든, 'AlarmManager'는 여기서 당신을 도와주지 않을 것입니다. 그러나 센서를 읽을 수 있도록 장치가 잠들지 않도록하려면 WakeLock이 필요합니다. – CommonsWare

+0

"센서를 사용하려고 할 때 장치의 전원을 항상 켜야합니다." 나는 그것이 사실이라면 나는 더 많은 배터리 소모를 볼 것이라고 생각할 것이기 때문에 이것이 사실이라고 믿지 않는다. 지금은 제대로 작동하는 것 같습니다. – Jackie

관련 문제