Fix startup crash: Delay offline manager initialization by 500ms
- Move init calls from onCreate() to Handler.postDelayed() - Create OfflineInitRunnable inner class for delayed execution - Add try-catch wrapper for safety - Add detailed logging for debugging This fixes the crash caused by offline managers trying to access Context/SharedPreferences before Android system fully initializes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
.class Lcom/firemint/realracing/MainActivity$OfflineInitRunnable;
|
||||
.super Ljava/lang/Object;
|
||||
.source "SourceFile"
|
||||
|
||||
# interfaces
|
||||
.implements Ljava/lang/Runnable;
|
||||
|
||||
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/EnclosingClass;
|
||||
value = Lcom/firemint/realracing/MainActivity;
|
||||
.end annotation
|
||||
|
||||
.annotation system Ldalvik/annotation/InnerClass;
|
||||
accessFlags = 0x2
|
||||
name = "OfflineInitRunnable"
|
||||
.end annotation
|
||||
|
||||
|
||||
# instance fields
|
||||
.field final synthetic this$0:Lcom/firemint/realracing/MainActivity;
|
||||
|
||||
|
||||
# direct methods
|
||||
.method constructor <init>(Lcom/firemint/realracing/MainActivity;)V
|
||||
.locals 0
|
||||
|
||||
.line 1
|
||||
iput-object p1, p0, Lcom/firemint/realracing/MainActivity$OfflineInitRunnable;->this$0:Lcom/firemint/realracing/MainActivity;
|
||||
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
# virtual methods
|
||||
.method public run()V
|
||||
.locals 3
|
||||
|
||||
.line 1
|
||||
const-string v0, "RealRacing3"
|
||||
|
||||
const-string v1, "OfflineInitRunnable: Initializing offline managers (delayed)"
|
||||
|
||||
invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
|
||||
|
||||
.line 2
|
||||
:try_start_0
|
||||
iget-object v1, p0, Lcom/firemint/realracing/MainActivity$OfflineInitRunnable;->this$0:Lcom/firemint/realracing/MainActivity;
|
||||
|
||||
invoke-static {v1}, Lcom/firemint/realracing/LocalSaveManager;->initSaveFile(Landroid/content/Context;)V
|
||||
|
||||
.line 3
|
||||
const-string v1, " ✓ LocalSaveManager initialized"
|
||||
|
||||
invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
|
||||
|
||||
.line 4
|
||||
iget-object v1, p0, Lcom/firemint/realracing/MainActivity$OfflineInitRunnable;->this$0:Lcom/firemint/realracing/MainActivity;
|
||||
|
||||
invoke-static {v1}, Lcom/firemint/realracing/OfflineModeManager;->init(Landroid/content/Context;)V
|
||||
|
||||
.line 5
|
||||
const-string v1, " ✓ OfflineModeManager initialized"
|
||||
|
||||
invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
|
||||
|
||||
.line 6
|
||||
iget-object v1, p0, Lcom/firemint/realracing/MainActivity$OfflineInitRunnable;->this$0:Lcom/firemint/realracing/MainActivity;
|
||||
|
||||
invoke-static {v1}, Lcom/firemint/realracing/OfflineCurrencyManager;->init(Landroid/content/Context;)V
|
||||
|
||||
.line 7
|
||||
const-string v1, " ✓ OfflineCurrencyManager initialized"
|
||||
|
||||
invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
|
||||
|
||||
.line 8
|
||||
iget-object v1, p0, Lcom/firemint/realracing/MainActivity$OfflineInitRunnable;->this$0:Lcom/firemint/realracing/MainActivity;
|
||||
|
||||
invoke-static {v1}, Lcom/firemint/realracing/OfflineEventsManager;->init(Landroid/content/Context;)V
|
||||
|
||||
.line 9
|
||||
const-string v1, " ✓ OfflineEventsManager initialized"
|
||||
|
||||
invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
|
||||
|
||||
.line 10
|
||||
const-string v1, "✅ All offline managers initialized successfully!"
|
||||
|
||||
invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
|
||||
:try_end_0
|
||||
.catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
|
||||
|
||||
goto :goto_0
|
||||
|
||||
:catch_0
|
||||
move-exception v1
|
||||
|
||||
.line 11
|
||||
const-string v2, "❌ Error initializing offline managers:"
|
||||
|
||||
invoke-static {v0, v2, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
|
||||
|
||||
:goto_0
|
||||
return-void
|
||||
.end method
|
||||
@@ -6,6 +6,7 @@
|
||||
# annotations
|
||||
.annotation system Ldalvik/annotation/MemberClasses;
|
||||
value = {
|
||||
Lcom/firemint/realracing/MainActivity$OfflineInitRunnable;,
|
||||
Lcom/firemint/realracing/MainActivity$Message;,
|
||||
Lcom/firemint/realracing/MainActivity$KeyEventRunnable;,
|
||||
Lcom/firemint/realracing/MainActivity$MessageExecuteCallback;
|
||||
@@ -2237,17 +2238,17 @@
|
||||
:cond_0
|
||||
invoke-static {p0}, Lcom/firemint/realracing/AppProxy;->SetActivity(Landroid/app/Activity;)V
|
||||
|
||||
# Initialize LocalSaveManager for offline mode
|
||||
invoke-static {p0}, Lcom/firemint/realracing/LocalSaveManager;->initSaveFile(Landroid/content/Context;)V
|
||||
# Delayed initialization of offline managers (500ms delay to prevent crash)
|
||||
# This allows Android system to fully initialize Context, SharedPreferences, etc.
|
||||
iget-object v0, p0, Lcom/firemint/realracing/MainActivity;->handler:Landroid/os/Handler;
|
||||
|
||||
# Initialize OfflineModeManager
|
||||
invoke-static {p0}, Lcom/firemint/realracing/OfflineModeManager;->init(Landroid/content/Context;)V
|
||||
new-instance v1, Lcom/firemint/realracing/MainActivity$OfflineInitRunnable;
|
||||
|
||||
# Initialize OfflineCurrencyManager (sets unlimited currency for offline)
|
||||
invoke-static {p0}, Lcom/firemint/realracing/OfflineCurrencyManager;->init(Landroid/content/Context;)V
|
||||
invoke-direct {v1, p0}, Lcom/firemint/realracing/MainActivity$OfflineInitRunnable;-><init>(Lcom/firemint/realracing/MainActivity;)V
|
||||
|
||||
# Initialize OfflineEventsManager (enables all special events)
|
||||
invoke-static {p0}, Lcom/firemint/realracing/OfflineEventsManager;->init(Landroid/content/Context;)V
|
||||
const-wide/16 v2, 0x1f4
|
||||
|
||||
invoke-virtual {v0, v1, v2, v3}, Landroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z
|
||||
|
||||
.line 353
|
||||
invoke-virtual {p0}, Landroid/app/Activity;->getApplication()Landroid/app/Application;
|
||||
|
||||
Reference in New Issue
Block a user