調用startActivityForResult後,onActivityResult立刻回調

**今天用華爲手機測試APP的時候遇到了這個問題。A activity 跳轉到B activity,並在B activity執行返回,Aactivity 執行回調代碼 **

	//A activity 的跳轉
    Intent intent = new Intent(A.this, B.class);
    startActivityForResult(intent, Contacts.INDEX_TWO);
    Log.e(TAG, "開始跳轉");


	//A activity 的回調
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.e(TAG, "得到回調");
    }
		//B activity帶參數返回
		  Log.e(TAG, "帶參數返回");
          Intent intent = getIntent();
          Bundle data = new Bundle();
          data.putString("regionId", node.getId() + "");
          intent.putExtras(data);
          B.this.setResult(RESPONSE_CODE, intent);
          B.this.finish();

執行了上面的代碼,輸出的時候 得到的結果

12-24 07:20:35.508 13694-13694/com.example.waterdevice E/A: 開始跳轉
12-24 07:20:35.508 13694-13694/com.example.waterdevice E/A: 得到回調

打印的Log日誌,說明A activity啓動有返回值參數的Activiy的時候,就已經執行了回調的方法,所以就根本得不到我們想要的返回值。
後來在網上查詢了相關信息,最後查到的原因是我們在AndroidManifest.xml配置文件中 在Activity註冊上設置了一句代碼,這句代碼就是
android:launchMode=“singleTask”。
這個代碼導致2個activity都在村不同的棧裏面,在android中不同的棧之間不能進行數據通信。
所以在跳轉的activity(B activity)取消這句代碼就可以正常訪問了

寫該博客的作用,是留個備註,防止以後再次遇到該問題的時候,在此感謝CSDN的各位前輩的資料信息,讓我能解決這個問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章