android - Gradle 插件版本的更改会影响 APK 性能吗?

标签 android gradle android-build gradle-plugin

我最近使用 Gradle 插件升级了我的 Android 应用程序 2.2.3 到 Gradle 插件 3.0.1。 通过这些更改,我的应用程序在启动 Activity 、在 CursorLoader 完成后重新加载 View 等时遭受了性能损失(不到 1 秒,但很明显)。

例如,在一种情况下,用户执行查询数据库并加载另一个屏幕的操作。这次以毫秒为单位的时间从大约 470 毫秒变为 1200 毫秒。我觉得我应该首先解决为什么延迟会这么大,但我现在主要关注的是 gradle 插件版本更改将如何影响它。

我决定通过仅升级到 来缩小问题范围。 2.3.0 .性能问题依然存在。这是我重现缓慢行为所必需的项目级 Gradle 文件中的唯一更改:

dependencies {
    classpath 'com.android.tools.build:gradle:2.2.3'
    ...
}

更改为...
dependencies {
    classpath 'com.android.tools.build:gradle:2.3.0'
    ...
}

构建工具的版本始终为 26.0.2。我已经在运行 Marshmallow 的设备和运行 Lollipop 的设备上验证了缓慢。我注意到运行 Nougat 的设备没有区别。
  • 我说 Gradle 插件版本控制更改会影响构建的 APK 性能是否合理?
  • 这种单线变化导致的其他哪些因素可能是错误的?
  • 我还能提供哪些其他信息来帮助您指明正确的方向?

  • 谢谢。

    编辑:我创建了一个重现此行为的示例应用程序。它由两个 Activity 组成。当我按下按钮时,第一个启动第二个。第二个 Activity 为大量迭代执行虚拟 for 循环,记录时间戳之前和之后的日志。

    主要 Activity :
    startActivity(new Intent(MainActivity.this, SecondActivity.class));
    

    第二 Activity :
    @Override
        public void onCreate(Bundle savedInstanceState) {
            Log.i(TAG, "SecondActivity:onCreate");
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Log.i(TAG, "Before wait...");
            for (int i = 0; i < 1000000000; i++) {
    
            }
            Log.i(TAG, "After wait...");
        }
    

    结果:

    2.2.3:
    01-15 14:23:54.65 I/SecondActivity: SecondActivity:onCreate
    01-15 14:23:54.705 I/SecondActivity:WAITING之前...
    01-15 14:23:56.635 I/SecondActivity: 等待之后...
    (2 秒)

    2.3.0:
    01-15 14:25:25.185 I/SecondActivity: SecondActivity:onCreate
    01-15 14:25:25.265 I/SecondActivity:WAITING之前...
    01-15 14:25:55.795 I/SecondActivity:WAITING之后...
    (30秒)

    最佳答案

    我去了首选项(构建、执行、部署>即时运行)并禁用即时运行。我的问题解决了。我想我在旧版本上使用了这么长时间后,不习惯这个功能。

    我能找到的最接近解释的是:
    https://medium.com/google-developers/instant-run-how-does-it-work-294a1633367f

    From now on, each time a method gets called — anywhere within our app — the instrumentation injected into our original class files communicates with the App Server to see if they’ve been updated.



    现在我只想停止用头撞墙。

    关于android - Gradle 插件版本的更改会影响 APK 性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48269320/

    相关文章:

    java - 在运行时检查位置设置更改

    java - Libgdx 在 android studio 中支持 gradle

    android - 使用 eclipse 在 Android 中快速构建

    c++ - 在 Android NDK 上使用 STL_tree.h 结果为 "No such file or directory"

    android - 无法在 Android 中使用 Pop 接收邮件

    android - Gradle :多种口味,每种口味都有生产和生产的终点

    java - 使用 IntelliJ IDEA 15.0.2 生成签名 APK 时出现 NullPointerException

    android - 单独使用Android SDK的Hello world(无IDE)

    Android FragmentActivity 不显示操作栏

    android - 为什么发行版.apk小于调试.apk