0

インスタンスを1つだけ持ちたいAndroid用のゲームを設計しています。

ゲームには、GameActivity と呼ばれるメイン アクティビティと、CreateAccountActivity と呼ばれる別のアクティビティがあります。

マニフェストで GameActivity を int に定義しましたandroid:launchMode="singleTask"

アプリケーションの初回起動時に、メソッドを使用して CreateAccoutActivity を開始しますstartActivityForResult

問題は、ホームボタンを押してアプリケーションを起動しても何も起こらないことです (ユーザーの観点からは、ログから、CreateAccountActivity が破棄され、GameActivityonActivityResultが呼び出されてから破棄されていることがわかります (RESULT_CANCELコースから外れます.

ログは次のとおりです。

12-28 14:30:11.910: V/WindowManager(24745): Dsptch > Window{47ce9868 com.sec.android.app.twlauncher/com.sec.android.app.twlauncher.Launcher paused=false}
12-28 14:30:11.910: V/InputDevice(24745): ID[0]=0(0) Dn(0=>1)
12-28 14:30:11.973: D/dalvikvm(7770): GC_EXTERNAL_ALLOC freed 313 objects / 12648 bytes in 25ms
12-28 14:30:12.004: V/InputDevice(24745): ID[0]=0(0) Up(1=>0)
12-28 14:30:12.039: D/dalvikvm(7770): GC_EXTERNAL_ALLOC freed 88 objects / 2680 bytes in 25ms
12-28 14:30:12.110: D/dalvikvm(7770): GC_EXTERNAL_ALLOC freed 24 objects / 864 bytes in 25ms
12-28 14:30:12.157: V/WindowManager(24745): Dsptch > Window{47ce9868 com.sec.android.app.twlauncher/com.sec.android.app.twlauncher.Launcher paused=false}
12-28 14:30:12.157: I/ActivityManager(24745): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.*****.tq/.GameActivity }
12-28 14:30:12.161: D/Launcher.Workspace(7770): WorkspaceDraw: Workspace drawWallpaperImage()
12-28 14:30:12.168: I/CreateAccountActivity(9369): onDestroy
12-28 14:30:12.172: I/Launcher(7770): onPause()
12-28 14:30:12.184: W/Launcher(7770): WallpaperManager setVisibility visible true
12-28 14:30:12.203: I/GameActivity(9369): Game activity onActivityResult
12-28 14:30:12.203: I/GameActivity(9369): disconnecting from main server
12-28 14:30:12.203: I/ConnectionManager(9369): Disconnecting...
12-28 14:30:12.207: I/GameActivity(9369): Game activity onNewIntent is called
12-28 14:30:12.215: I/Launcher(7770): onWindowFocusChanged(false)
12-28 14:30:12.219: I/Launcher(7770): onResume(). mIsNewIntent : false
12-28 14:30:12.219: E/Launcher(7770): MTP-LAUNCHER: media scanning not yet finished . 
12-28 14:30:12.219: I/Launcher(7770): onResume() ended
12-28 14:30:12.219: I/Launcher(7770): onWindowFocusChanged(true)
12-28 14:30:12.223: W/InputManagerService(24745): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@47d9fa18
12-28 14:30:12.227: D/Launcher.Workspace(7770): WorkspaceDraw: Workspace drawWallpaperImage()
12-28 14:30:12.235: I/GameActivity(9369): Game activity destroyed
12-28 14:30:12.762: D/BatteryService(24745): update start
12-28 14:30:12.770: D/BatteryService(24745): updateBattery level:100 scale:100 status:5 health:2 present:true voltage: 4240 temperature: 360 technology: Li-ion AC powered:false USB powered:true icon:17302163
12-28 14:30:12.801: I/StatusBarPolicy(24745): BAT. status:5 health:2
12-28 14:30:12.801: D/WifiService(24745): ACTION_BATTERY_CHANGED pluggedType: 2
12-28 14:30:13.231: W/Launcher(7770): WallpaperManager setVisibility visible false
12-28 14:30:13.375: D/Launcher.Workspace(7770): WorkspaceDraw: Workspace drawWallpaperImage()

簡単にするために、次のように説明します: アクティビティ A = MAIN - singleTask アクティビティ B = (未定義 - 標準)

A startsForResult B -> ホーム ボタン -> ゲーム起動ボタン -> B が破壊された -> A onActivityResult が呼び出された -> A が破壊された -> ゲーム起動ボタン -> A startForResult B ...

編集

singleTask を使用する必要があるかどうかは疑問です。

コード化したインテントではなく、Android によってアクティビティをどこから開始しても、Android は常にアプリを再起動し、アクティビティの複数のインスタンスは存在しないというのは本当ですか?

その場合は、何でもグーです :)

4

1 に答える 1

0

活動記録より

「singleTask」アクティビティには、スタック内のその上に他のアクティビティがある場合とない場合があります。存在する場合、インテントを処理する立場にないため、インテントは破棄されます。(インテントが削除されたとしても、その到着によってタスクがフォアグラウンドに移動し、そこに残ります。)

ゲームの起動をクリックすると、これを作成Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.*****.tq/.GameActivity する GameActivity(A) が onNewIntent() でインテントを処理しようとします。これを確認するには、 Log.d("GameActivity", "onNewIntent is called") を配置できます。(B) 結果を設定する前に単純に破棄されます。

CreateAccountActivity.onDestroy() で setResult() を設定して、GameActivity で処理できるようにすることはできますか?

于 2011-12-28T16:23:50.190 に答える