目前我正在开发一个监控某些用户行为的Android应用程序,其中包括位置,加速度计,图片,短信和mms信息。
我正面临一个令人生畏的问题。我正在使用具有警报管理器的服务从这些服务中读取信息。
警报管理员已关注:
@Override
public void onCreate() {
Log.e(TAG, "onCreate");
Intent intent = new Intent(this, WorkingService.class);
PendingIntent pintent = PendingIntent.getService(
getApplicationContext(), 0, intent, 0);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
calendar.setTimeInMillis(System.currentTimeMillis());
alarm.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
15000, pintent);
}
这将每隔15秒调用此类的onstart命令。
@SuppressWarnings("static-access")
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand");
super.onStartCommand(intent, flags, startId);
在此服务的onStartCommand中,我从具有位置更新和其他信息的服务中读取内容。
问题在于,这在功率方面非常昂贵。有人告诉我,服务量对电池没有太大影响,但通过报警管理器访问这些服务。我在这个问题上有哪些替代方案?并且你能确认在我的应用程序中消耗更多电池的东西实际上是警报管理器服务。
如果是,那么定期从服务中读取并将数据发送到我的Web服务的更好方法是什么?
答案 0 :(得分:1)
为什么不尝试使用线程?像这样的东西会起作用:
Thread t = new Thread()
{
@Override
public void run()
{
while (true)
{
try
{
Thread.sleep(100);
} catch (InterruptedException ie)
{
fThreadRunning = false;
ie.printStackTrace();
}
}
}
};
t.start();
很明显,你读取的位置越多,你的电池消耗就越多,我建议你查看Android DDMS以查看哪些线程导致应用程序中电量消耗最大。< / p>