1

所以我有两节课。我要做的是将数据从MainActivity发送到Main2 ,在Logcat中获取日志,然后将控制权返回给MainActivity以便使用其他一些数据再次重复该步骤。

但我得到了意想不到的结果。我没有得到0,1,2,3,4,而是得到任何随机序列..有时以相反的顺序。这是为什么??这是因为使用了for循环吗?

MainActivity.java

public class MainActivity extends Activity {

int REQUEST_CODE = 0;
Intent i;
int k = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    i = new Intent(this, main2.class);
    loop();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        loop();
    }
}

public void loop() {
    for (int j = k; j < 5; j++, k++) {
        i.putExtra("value", j);
        startActivityForResult(i, REQUEST_CODE);
    }
}
}

Main2.java

public class main2 extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intent = getIntent();
    int i = intent.getIntExtra("value", 0);
    Log.d("Value", i + "");
    setResult(RESULT_OK);
    finish();
}  

}

4

3 回答 3

1

这是因为,当您调用 时startActivityForResult,您启动了 Activity,它最终会启动。请注意,不是立即启动,它们可能需要几毫秒才能启动。而且,Log.d也不是瞬间的。多线程编程与单线程有很大不同。

于 2013-09-21T12:52:57.560 回答
0

您正在从同一个线程开始所有活动。因为他们不会在 loop() 方法完成之前开始。第一次所有 5 项活动将一起开始。并且没有受赠者会花费相同的时间来开始和完成。所以这个输出是正常的。

此外,即使您在不同的线程中启动了每个活动,也没有被授权者也不会让第一个开始的活动首先完成。

所有这些都取决于 CPU 处理。

你能做的就是摆脱循环。并在 onActivityResult 方法中最后一个活动的响应之后执行一些逻辑来启动活动。

例子:

public void loop() {
    j = k;
    i.putExtra("value", j);
    startActivityForResult(i, REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (resultCode == RESULT_OK)
    {
        j++;
        if (j<5)
        {
            i.putExtra("value", j);
            startActivityForResult(i, REQUEST_CODE);
        }
        else
        {
            k++;
            loop();
        }
    }
}

我不知道。但我认为这正是你想要的。这可能需要更多时间不确定。

于 2013-09-21T13:25:04.007 回答
0

startActivityForResult的使用是针对特定需求的,例如,您的MainActivity需要获取一个仅在Main2上可用的值来检索该值。使用示例,您有一个活动 A 是一个用于编写电子邮件的屏幕,它有一个用于输入联系信息的字段。活动 B 仅显示联系人列表。

在这种情况下,您基本上会执行以下操作:

  1. 在活动 A 上:您将调用 startActivityForResult(, )
  2. on Activity B:你显示联系人列表并等待用户点击,在联系人的onClick上,你基本上会得到联系人的email。使用用户电子邮件,将其放入 new Intent 并调用 setResult(RESULT_OK, intentData);
  3. 在 onActivityResult() 上,您将放置代码期望调用结果 == RESULT_OK 和请求代码 == X...当它出现时,您将从 onActivityResult 方法的给定意图中读出参数,它将通过电子邮件发送并您根据上一步的意图传递的所有参数。

就是这样!祝你好运!

于 2013-09-21T13:26:30.783 回答