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

标签 android service

目前我正在开发一个 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/

相关文章:

Android 无法解析方法 getActivity()

windows - 将 Systems Internals 列为制造商的 Windows 服务的名称是什么?

c++ - 如何检查一个程序是否被windows服务启动并完美运行?

android - 在我自己的布局中使用 listItemFirstLineStyle

php - 如何高效地通过JSON从MYSQL服务器获取BLOB图像文件

java安装tomcat作为服务

symfony - 服务中的 Simfony2 服务尝试调用方法 "get"

android - 在 Android 中创建后台服务

安卓 : how to pass multiple numbers to create contact page

android - 您可以将 Flutter 项目导出到 Java 和 Swift 吗?