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

问题描述 投票:2回答:1

目前,我正在开发一个可监视某些用户行为的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中,我从具有位置更新和其他信息的服务中读取内容。

问题在于,这在功率方面非常昂贵。 有人告诉我,服务数量不会对电池产生重大影响,但可以通过警报管理器访问这些服务。 我在这个问题上有什么选择? 并且可以确认我的应用中消耗更多电量的东西实际上是警报管理器服务。

如果是这样,那么定期读取服务并将数据发送到我的Web服务中的更好方法是什么?

android service
1个回答
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 ,看看哪些线程导致了应用程序中最大的电池消耗。

© www.soinside.com 2019 - 2024. All rights reserved.