所以我有两节课。我要做的是将数据从 MainActivity 发送到 Main2 ,登录 Logcat ,然后将控制权恢复为 MainActivity 以便使用其他一些数据重复该步骤。
但是我得到了意想不到的结果。我没有得到 0,1,2,3,4 ,而是得到任何随机序列..有时候是相反的顺序。这是为什么??这是由于使用 for loop ??
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();
}
}
答案 0 :(得分:1)
这是因为,当您致电startActivityForResult
时,您启动活动,最终将启动。请注意,不是立即启动,它们可能需要几毫秒才能启动。此外,Log.d
也不是即时的。多线程编程与单线程编程有很大不同。
答案 1 :(得分: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();
}
}
}
我不确定。但我认为这正是你想要的。这可能需要一点时间不确定。
答案 2 :(得分:0)
startActivityForResult 的使用是针对特定需求的,例如, MainActivity 需要获取仅在 Main2 上可用的值检索此值。使用示例,您有一个活动A是一个写电子邮件的屏幕,它有一个输入联系信息的字段。活动B仅显示联系人列表。
在这种情况下,您基本上将执行以下操作:
就是这样!祝你好运!