在android应用程序中使用后台服务进行服务器通信的最佳方法

时间:2014-06-17 14:10:00

标签: android service

目前我正在开发一个监控某些用户行为的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服务的更好方法是什么?

1 个答案:

答案 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>