java - 连接到google fit android API不在 Activity 类中

标签 java android multithreading google-fit

我目前正在学习 Android 编码,但在理解如何正确连接到 API(或者在我的特定情况下连接到 Google fit API)方面遇到了一些困难。

在 Google 开发人员提供的示例中,他们在 onCreate() 方法中连接到 API。但是,我在想,在开发更复杂的应用程序时,以及何时可以将连接到 API 的代码保留在 Activity 类中,这是否是最佳实践?更具体地说,什么时候应该将其移至其他线程?我担心以这种方式保持代码的性能问题 - 另一方面,如果我将此代码移至其他线程,是否有可能在后台运行时遇到与 android 服务终止相关的一些连接问题?

https://github.com/googlesamples/android-fit/blob/master/BasicHistoryApi/app/src/main/java/com/google/android/gms/fit/samples/basichistoryapi/MainActivity.java

protected void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FitnessOptions fitnessOptions = FitnessOptions.builder()
            .addDataType(TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
            .build();


    if (!GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(this), fitnessOptions)) {
        GoogleSignIn.requestPermissions(
                this,
                REQUEST_OAUTH_REQUEST_CODE,
                GoogleSignIn.getLastSignedInAccount(this),
                fitnessOptions);
    } else {
        accessGoogleFit();
    }
}

如果我的问题看起来愚蠢且基本,我提前表示歉意,但我非常渴望了解更多有关编码的最佳实践并了解如何开发工作应用程序!

最佳答案

为了让您更好地理解,通常谷歌(或大多数人)给出的任何示例都是最简单的形式,只是为了让您了解代码或框架,您决定如何最好地实现它取决于您,您将从经验中获得。

要进一步回答你的问题,这确实要根据情况而定。如果您的 Activity 不打算多次创建或重新创建(即使它被销毁并重新创建,根据具体情况,它仍然可能没问题),那么将 api 调用保留在 Activity 的创建中可能没问题,但是,理想情况下,应该使用 RxJava 或其他线程技术之类的技术将这个调用移出到不同的线程。这样做的原因是(当在主线程上完成 api 调用时)它可能会挂起整个应用程序,直到 api 调用返回信息为止,这是不好的做法,会给您带来很多问题。将此代码移至不同的线程不会恶化性能(恰恰相反),您可能应该尝试以某种形式的线程来实现此代码。

关于java - 连接到google fit android API不在 Activity 类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124264/

相关文章:

android - 错误: package PermissionUtils does not exist

java - 如果没有 stop() 方法,则不支持已弃用的线程方法

java - Java中带有监视器的生产者/消费者的多个实例

c - POSIX sem_wait() SIGABRT

java - 如何设置实例化标签的文本?

java - 在 Java 中为 AES 生成随机 IV

android - 如何酿造木桶安装旧的android-sdk

java - JTransforms FFT 的大小与 MATLAB 的比较

java - 在java文件处理中使用 "throws IOException"

c++ - 如何将 std::promise 传递到线程中?通过 std::move 还是通过 std::shared_ptr?