如何管理一个具有多个操作的Android服务?

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

我最近加入了一家新公司,并接手了一个已经持续多年的项目。这张图的不幸问题是一些代码维护得很差,对我来说描述当前情况的最简单方法是当前的实现过于复杂。

我目前正在尝试简化其中一些操作(编码),以提高整个应用程序的性能和响应能力。我已尽力不要改变太多,因为尽管这很诱人,但此时会涉及太多工作。

我正在努力开发下一个版本,但我必须首先解决一些关键问题。

其中一个问题是 Android 服务的使用。目前,至少根据以前的开发人员所做的,他们试图从头开始创建他们的服务,老实说,这没有意义,因为 Android 本身已经提供了一种方法来做到这一点。我想也许使用内置的后台服务就足够了。

我已经好几年没有积极参与 Android 项目了,但我仍然记得一些事情。我想弄清楚的一件事是,是否可以创建一个Android服务类,然后让它在后台管理不同类型的操作?由于保密协议,我可以在这里使用真实的代码,但我可以给你一个例子:

// UserAccountService - Just an example from the docs.

public class UserAccountService extends Service {
    private Looper serviceLooper;
    private ServiceHandler serviceHandler

    private final class ServiceHandler extends Handler {
        public ServiceHandler (Looper looper) {
            super(looper);
        }

        @Override
        public void handleMessage (Message msg) {
            try {
                // do some work here
            } catch (InterruptedException ex) {
            }
            stopSelf(msg.arg1);
        }
    }

    @Override
    public void onCreate() {
        // same as the example from developer.android.com/develop/background-work/services#java
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    }

    @Override
    public IBinder onBind (Intent intent) {
    }

    @Override
    public void onDestroy() {
    }

    /**
     * Below I would have all the functions for performing some of the standard UserAccount related 
     * operations.
     */

     protected bool isAnonymousUserOnline() {
     }

     protected void autoLogin() {
     }

     protected void logout() {
     }

     protected User getUserById() {
     }

     protected User getAnonymousUser() {
     }
}
  1. 基于上面的简要概述和示例,我想知道,我可以通过意图对象传递值吗?类似于在活动和片段之间导航?查看在线文档中提供的编码示例,我认为这是可能的。

  2. 然后,根据可以从意图(在 UserAccountService 内)收集的值,我可以执行 switch-case 块来过滤传递的值,然后在 try {} 块中运行不同的用户帐户操作.

  3. 最后,在示例中的不同重写方法中,我可以肯定地理解onCreate的用途。我很好奇的是另外两个,比如

    onStartCommand()
    onBind()
    。我们通常应该在这些函数中放入什么?

实现此 UserAccountService 的最佳方式是什么?有什么我需要注意的潜在陷阱吗?

java android android-intent android-service
1个回答
0
投票

例如,在我的应用程序的通信BluetoothLe部分中,通信是使用绑定服务执行的,并使用广播将信息从服务发送到活动。

请参阅 https://developer.android.com/develop/connectivity/bluetooth/ble/connect-gatt-server

要将信息从活动发送到服务,我只需调用服务函数即可。 例如。通知服务活动是活动还是暂停

在活动中

bluetoothService!!.activityInPausedState()
bluetoothService!!.activityInActiveState()

服务中

var activityIsPaused:Boolean = false
fun activityInPausedState() {
    activityIsPaused = true
}
fun activityInActiveState() {
    activityIsPaused = false
}

希望对你有一点帮助

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