0

シナリオ

アクティビティ A (ログイン) がアクティビティ B を開始してから、finish();

アクティビティ B は startActivityForResult(Activity C) を呼び出します

アクティビティ C は適切に実行され、電話番号を選択した後に終了します (当然のことです)。

-- デスクトップに戻ります (アプリが停止します)。

アクティビティ B の onActivityResult() に戻らなかったのはなぜですか?

ノート

アクティビティ B に適切な onActivityResult() を作成しました。

startActivityForResult に関する stackoverflow のすべてのデータを検索して読み取りました。

コードスリップ

アクティビティ B を開始するコード:

ComponentName   component   = new ComponentName("com.emobiletelecom", PokeTALK.class.getName());
    Intent          intent      = new Intent();
    intent.setComponent(component);
startActivity(intent);
    finish();

アクティビティ C を開始するコード:

startActivityForResult(new Intent(this, ContactsPickerActivity.class), 2007);

コード仕上げアクティビティ C:

Intent intent = new Intent();
    intent.putExtra(KEY_PHONE_NUMBER, contactNumber); 

    setResult(RESULT_OK, intent);
    finish();
enter code here

ログ

04-23 16:32:27.382: I/ActivityManager(28158): START 

{cmp=com.emobiletelecom/com.codinguser.android.contactpicker.ContactsPickerActivity} from pid 30108
04-23 16:32:27.392: W/WindowManager(28158): Failure taking screenshot for (180x300) to layer 21010
04-23 16:32:27.432: V/PokeTALK(30108): onPause
04-23 16:32:27.642: I/WindowManager(28158): createSurface Window{415eefe8 com.emobiletelecom/com.codinguser.android.contactpicker.ContactsPickerActivity paused=false}: DRAW NOW PENDING
04-23 16:32:27.812: V/PhoneStatusBar(28212): setLightsOn(true)
04-23 16:32:28.042: I/ActivityManager(28158): Displayed com.emobiletelecom/com.codinguser.android.contactpicker.ContactsPickerActivity: +599ms
04-23 16:32:28.192: V/PT(30108): onStop - PokeTALK
04-23 16:33:00.292: D/dalvikvm(28212): GC_CONCURRENT freed 396K, 36% free 10580K/16391K, paused 14ms+8ms
04-23 16:33:24.102: D/dalvikvm(30108): GC_FOR_ALLOC freed 189K, 6% free 12032K/12679K, paused 52ms
04-23 16:33:24.122: I/dalvikvm-heap(30108): Grow heap (frag case) to 13.159MB for 1390096-byte allocation
04-23 16:33:24.232: D/dalvikvm(30108): GC_CONCURRENT freed 33K, 6% free 13355K/14087K, paused 4ms+4ms
04-23 16:33:24.341: D/dalvikvm(30108): GC_FOR_ALLOC freed 0K, 6% free 13356K/14087K, paused 34ms
04-23 16:33:24.351: I/dalvikvm-heap(30108): Grow heap (frag case) to 14.452MB for 1390096-byte allocation
04-23 16:33:24.522: D/dalvikvm(30108): GC_CONCURRENT freed <1K, 6% free 14713K/15495K, paused 18ms+5ms
04-23 16:33:27.342: W/WindowManager(28158): Failure taking screenshot for (180x300) to layer 21015
04-23 16:33:27.392: W/NetworkManagementSocketTagger(28158): setKernelCountSet(10005, 1) failed with errno -2
04-23 16:33:27.442: I/WindowManager(28158): createSurface Window{41614cd0 com.android.launcher/com.android.launcher2.Launcher paused=false}: DRAW NOW PENDING
04-23 16:33:27.532: W/InputManagerService(28158): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@413fbdb0 (uid=10040 pid=30108)
04-23 16:33:28.292: W/NetworkManagementSocketTagger(28158): setKernelCountSet(10040, 0) failed with errno -2
4

2 に答える 2

1
I call finish() on the following methods: onStop(), onKeyDown(back key clicked), finishFromChild()

finishFromChild()アクティビティ B が誤って閉じられている場所だと思います。finishFromChild()は、子アクティビティ (この仮説では C) が を呼び出すときに呼び出されますfinish()。したがって、このコマンドは、意図しないときにアクティビティ B を閉じるコマンドである可能性があります。

于 2012-04-23T17:13:37.043 に答える
0

アクティビティ C を起動するときに、アクティビティ B 内で finish() を呼び出すべきではありません。アクティビティ B は、アクティビティ C からの結果を受け取るために残り続ける必要があります。

于 2012-04-23T16:47:58.803 に答える