amplify-flutter icon indicating copy to clipboard operation
amplify-flutter copied to clipboard

Slow app startup caused by Amplify V1 DataStore in Android

Open joshuamoreno1 opened this issue 1 year ago • 2 comments

Description

I’m experiencing issues with my Flutter app on Android devices when using AWS Amplify DataStore. The app works perfectly on iOS devices, but it takes a long time to start on physical Android devices. During debugging, I found that it gets stuck at this line:

await Amplify.configure(amplifyconfig);

After 1 to 2 minutes, the app finally starts, but I also notice it slows down when DataStore synchronization begins. The operating system shows an alert indicating that the app is not responding, but if you wait, it eventually continues to function correctly.

The only thing that i see in logs related to DataStore is this:

I/amplify:flutter:datastore( 8563): Added Auth plugin
I/amplify:flutter:datastore( 8563): Added API plugin
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:flutter:datastore( 8563): Unhandled DataStoreHubEvent: SUCCEEDED
I/amplify:flutter:datastore( 8563): com.amplifyframework.core.category.CategoryInitializationResult@21cbb22
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator transitioning from STOPPED to SYNC_VIA_API
I/amplify:aws-datastore( 8563): Starting to observe local storage changes.
I/amplify:aws-datastore( 8563): Now observing local storage. Local changes will be enqueued to mutation outbox.
I/amplify:aws-datastore( 8563): Setting currentState to LOCAL_ONLY
I/amplify:aws-datastore( 8563): Setting currentState to SYNC_VIA_API
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/amplify:aws-datastore( 8563): Starting API synchronization mode.
I/amplify:flutter:datastore( 8563): Successfully started datastore remote synchronization
I/amplify:aws-datastore( 8563): Starting processing subscription events.
I/ck.person.alph( 8563): Background concurrent copying GC freed 42176(3916KB) AllocSpace objects, 10(328KB) LOS objects, 49% free, 8996KB/17MB, paused 84us total 110.298ms
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/amplify:flutter:datastore( 8563): Successfully started datastore remote synchronization
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/amplify:flutter:datastore( 8563): Established a new stream form flutter com.amplifyframework.datastore.storage.sqlite.SQLiteStorageAdapter$$ExternalSyntheticLambda10@60f6b88
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/GED     ( 8563): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 31, oppidx_max 31, oppidx_min 0
I/GED     ( 8563): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 31, oppidx_max 31, oppidx_min 0
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/GED     ( 8563): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 31, oppidx_max 31, oppidx_min 0
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/GED     ( 8563): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 31, oppidx_max 31, oppidx_min 0
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=1 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 2.169s
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/GED     ( 8563): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 31, oppidx_max 31, oppidx_min 0
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=2 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 2.858s
I/GED     ( 8563): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 31, oppidx_max 31, oppidx_min 0
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
I/amplify:aws-datastore( 8563): DataStore plugin initialized.
I/amplify:aws-datastore( 8563): Orchestrator lock released.
I/amplify:aws-datastore( 8563): Orchestrator lock acquired.
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=4 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 4.767s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=5 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 4.969s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=6 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 5.172s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=7 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 5.395s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=8 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 5.592s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=9 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 5.713s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=10 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 5.936s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=11 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 6.233s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=12 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 6.386s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=13 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 6.655s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=14 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 6.869s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=15 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 7.067s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=16 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 7.687s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=17 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 7.886s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=18 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 8.177s
W/ck.person.alph( 8563): Long monitor contention with owner pool-20-thread-1 (8953) at void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action)(SubscriptionEndpoint.java:140) waiters=19 in void com.amplifyframework.api.aws.SubscriptionEndpoint.requestSubscription(com.amplifyframework.api.graphql.GraphQLRequest, com.amplifyframework.api.aws.AuthorizationType, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Consumer, com.amplifyframework.core.Action) for 8.388s
I/amplify:aws-datastore( 8563): Started subscription processor for models: [ProfileStats, GroupMessageReference, GroupMessage, ProfileRelationship, PopPops, P2PMessage, Profile] of types [ON_CREATE, ON_UPDATE, ON_DELETE].
I/flutter ( 8563): ----subscriptionsEstablished----
I/flutter ( 8563): ----syncQueriesStarted----
I/flutter ( 8563): [PopPops, GroupMessageReference, ProfileRelationship, P2PMessage, Profile, ProfileStats, GroupMessage]
I/amplify:aws-datastore( 8563): Successfully sync'd down model state from cloud.

However, this issue does not occur on iOS devices. I also checked the AppSync API logs in CloudWatch, and all synchronization queries and other requests are executed successfully without any errors. It’s possible that on Android, the operations are executed sequentially, whereas on iOS, they are executed in parallel.

This is my flutter doctor info:

[✓] Flutter (Channel stable, 3.19.4, on macOS 14.2 23C64 darwin-arm64, locale en-CO)
    • Flutter version 3.19.4 on channel stable at /Users/invitado/development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 68bfaea224 (6 months ago), 2024-03-20 15:36:31 -0700
    • Engine revision a5c24f538d
    • Dart version 3.3.2
    • DevTools version 2.31.1

[✓] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    • Android SDK at /Users/invitado/Library/Android/sdk
    • Platform android-34, build-tools 32.1.0-rc1
    • ANDROID_HOME = /Users/invitado/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.4)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 15F31d
    • CocoaPods version 1.15.2

[✓] Android Studio (version 2021.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)

[✓] VS Code (version 1.93.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.94.0

[✓] Network resources
    • All expected network resources are available.

• No issues found!

And gradle files:

  • android/app/build.gradle:
android {
    namespace "com.nock.person"
    compileSdkVersion 34
    ndkVersion flutter.ndkVersion

    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

    defaultConfig {
         minSdkVersion 24
        targetSdkVersion 34
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

    buildTypes {
       release {
            minifyEnabled true
            shrinkResources false
            signingConfig signingConfigs.release
       }
    }

....

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
    implementation 'com.google.android.gms:play-services-nearby:18.7.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

  • android/gradle/wrapper/gradle-wrapper.properties: distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-all.zip

  • android/build.gradle:

...
buildscript {
    ext.kotlin_version = '1.8.21'
    repositories {
        google()
        mavenCentral()
    }

   dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2'
        classpath 'com.google.gms:google-services:4.3.15'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
...

I truly appreciate your help with this issue, as it is currently blocking the release of my app on the Google Play Store. I’ve only been able to launch the app on iOS so far due to this performance problem on Android. Your support means a lot to me, and I’m looking forward to any insights you can provide to resolve this.

Categories

  • [ ] Analytics
  • [ ] API (REST)
  • [ ] API (GraphQL)
  • [ ] Auth
  • [ ] Authenticator
  • [X] DataStore
  • [ ] Notifications (Push)
  • [ ] Storage

Steps to Reproduce

  1. Build the Android APK:

    • Develop a Flutter app using AWS Amplify DataStore.
    • Use the provided schema to define the data models in DataStore.
    • Set up user authentication and ensure that the app can log in users.
    • Build the APK for Android using Flutter tools.
    • Deploy the APK on a regular Android device, such as a Xiaomi smartphone.
  2. Start the App with a Logged-In User:

    • Ensure a user is already logged in before starting the app.
    • When the app launches, it should begin loading data from DataStore models. Ensure that the data size is not too large (e.g., no more than 10 records per user).
  3. Observe the App Behavior:

    • Notice that the app takes a significant amount of time to start (1-2 minutes).
    • Check logs to see the errors.
    • During the startup, observe that the app seems to be stuck at the await Amplify.configure(amplifyconfig); line.
    • Additionally, when DataStore synchronization begins, the app becomes slow, and the Android operating system may display a "App not responding" alert.
    • If you wait, the app eventually resumes and functions correctly.

Screenshots

No response

Platforms

  • [ ] iOS
  • [X] Android
  • [ ] Web
  • [ ] macOS
  • [ ] Windows
  • [ ] Linux

Flutter Version

3.19.4

Amplify Flutter Version

1.7.0

Deployment Method

Amplify CLI (Gen 1)

Schema

# all models in this schema. Learn more about authorization rules here: https://docs.amplify.aws/cli/graphql/authorization-rules
type Profile
  @model
  @auth(
    rules: [
      { allow: private, operations: [read, update], provider: iam }
      {
        allow: owner
        ownerField: "id"
        operations: [create, read, update, delete]
      }
    ]
  ) {
  id: ID!
  name: String!
  status: ProfileStatus!
  description: String
  city: String
  locale: String
  type: ProfileType
  imageId: String
}
enum ProfileStatus {
  active
  inactive
  blocked
}

enum ProfileType {
  person
  business
}

type ProfileRelationship
  @model
  @auth(
    rules: [
      { allow: private, operations: [create, read, update], provider: iam }
      { allow: owner, ownerField: "id", operations: [read, update, delete] }
    ]
  ) {
  id: ID! @primaryKey(sortKeyFields: ["popId"])
  popId: ID! @index(sortKeyFields: ["id"])
  status: ProfileRelationshipStatus!
  invisible: Boolean
}

enum ProfileRelationshipStatus {
  unpop
  pop
  pending
  popPop
  blocked
}

type ProfileStats
  @model
  @auth(
    rules: [
      { allow: private, operations: [read, update], provider: iam }
      { allow: owner, ownerField: "id", operations: [create, read] }
    ]
  ) {
  id: ID! @primaryKey(sortKeyFields: ["statsType"])
  statsType: ProfileStatsType!
  pops: Int
  popPops: Int
}

enum ProfileStatsType {
  relationships
}

type PopPops
  @model
  @auth(rules: [{ allow: owner, ownerField: "id", operations: [read] }]) {
  id: ID! @primaryKey(sortKeyFields: ["popId"])
  popId: ID! @index(sortKeyFields: ["id"])
}

type P2PMessage
  @model
  @auth(
    rules: [
      { allow: owner, ownerField: "id", operations: [read, update, delete] }
      { allow: private, operations: [create] }
    ]
  ) {
  id: ID! @primaryKey(sortKeyFields: ["uuid"]) @index(sortKeyFields: ["popId"])
  uuid: ID!
  popId: ID!
  status: P2PMessageStatus!
  type: MessageType!
  url: String
  message: String
  popPop: Boolean
  expirationUnixTime: AWSTimestamp! @ttl
  sentAt: Float!
}

enum P2PMessageStatus {
  unread
  read
  deleted
}

type GroupMessageReference
  @model
  @auth(
    rules: [
      { allow: owner, ownerField: "id", operations: [read, update, delete] }
      { allow: private, operations: [create] }
    ]
  ) {
  id: ID! @primaryKey(sortKeyFields: ["uuid"]) @index(sortKeyFields: ["popId"])
  uuid: ID!
  popId: ID!
  status: GroupMessageStatus!
  expirationUnixTime: AWSTimestamp! @ttl
  sentAt: Float!
}

enum GroupMessageStatus {
  unread
  read
  deleted
}

type GroupMessage
  @model
  @auth(
    rules: [
      {
        allow: owner
        ownerField: "id"
        operations: [create, read, update, delete]
      }
      { allow: private, operations: [read] }
    ]
  ) {
  id: ID! @primaryKey(sortKeyFields: ["uuid"])
  uuid: ID!
  type: MessageType!
  url: String
  message: String
  expirationUnixTime: AWSTimestamp! @ttl
  sentAt: Float!
}

enum MessageType {
  message
  image
  voice
  video
  file
  audio
}

joshuamoreno1 avatar Sep 13 '24 04:09 joshuamoreno1

Hi @joshuamoreno1, thank you for submitting this issue. We will take a look at this issue and get back to you when we have any updates or questions.

tyllark avatar Sep 13 '24 22:09 tyllark

Hi @joshuamoreno1, can you try to update to Amplify DataStore v1.8.0?

This version updated the Amplify Android package being consumed, which contained several improvements.

Please let us know if that resolved your issue.

Equartey avatar Sep 16 '24 14:09 Equartey

Hi there!,

I recently update to that version and deployed in a Xiaomi and Samsung device but still having the same problem.

New Android plugin settings:

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "8.1.0" apply false
    id "org.jetbrains.kotlin.android" version "1.9.10" apply false
    id "com.google.gms.google-services" version "4.3.15" apply false
}

Do you know may be what could be the problem?

Thanks,

joshuamoreno1 avatar Oct 30 '24 04:10 joshuamoreno1

Hello @joshuamoreno1, currently Amplify Datastore v1 is in maintenance mode, I would recommend upgrading to v2 and see if the issue is resolved. Please see the documentation for reference.

ekjotmultani avatar Oct 31 '24 19:10 ekjotmultani

Guys, You are awesome!!!, all is working perfect and I dont have the erros any more. Thanks a lot!!!

joshuamoreno1 avatar Nov 07 '24 03:11 joshuamoreno1

This issue is now closed. Comments on closed issues are hard for our team to see. If you need more assistance, please open a new issue that references this one.

github-actions[bot] avatar Nov 07 '24 03:11 github-actions[bot]