目前我正在开发一个 android 应用程序来监控一些用户行为,这些行为是位置、加速度计、图片、短信和彩信信息。
我面临着一个棘手的问题。我正在使用具有警报管理器的服务从这些服务中读取信息。
报警管理器如下:
@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 中,我从具有位置更新和其他信息的服务中读取内容。
问题是这在功率方面非常昂贵。有人告诉我,服务的数量不会对电池产生重大影响,但通过警报管理器访问这些服务会产生重大影响。在这个问题上我有什么选择?你能确认我的应用程序中消耗更多电池的东西实际上是警报管理器服务吗?
而且,如果是,那么定期从服务中读取并将该数据发送到我的网络服务中的更好方法是什么?
最佳答案
为什么不尝试使用线程呢?这样的事情会起作用:
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查看哪些线程在您的应用程序中导致最大的电池消耗。
关于android - 在 android 应用程序中进行服务器通信的后台服务的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24266048/