Slow app startup caused by Amplify V1 DataStore in Android
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
-
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.
-
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).
-
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
}
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.
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.
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,
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.
Guys, You are awesome!!!, all is working perfect and I dont have the erros any more. Thanks a lot!!!
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.