我正在测试我的手机可以并行创建多少意图,但只创建了一个......
这是我的应用清单
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".IntentExamples"
android:exported="false"
android:launchMode="standard"
android:parentActivityName=".MainActivity">
</activity>
</application>
这是我所有电话的课程......
public class IntentExamples extends AppCompatActivity {
// Numbers of intents created
static int COUNTER = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_examples);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// When a intent is created +1 to the counter
COUNTER++;
((TextView) findViewById(R.id.intent_counter)).setText("NUMBER OF INTENTS: " + COUNTER);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.another_intent:
Intent intent = new Intent(IntentExamples.this, IntentExamples.class);
startActivity(intent);
case android.R.id.home:
this.finish(); break;
default:
return false;
}
return true;
}
@Override
protected void onDestroy() {
super.onDestroy();
// When a intent is completely destroy, -1 to the counter
COUNTER--;
}
主要活动只是从菜单代码中复制粘贴代码......
当我点击创建另一个意图的项目菜单时,在TextView中显示创建了1个意图,我再次点击它,显示创建了2个意图,当我第三次按下按钮时它被卡在2个意图中...我不明白为什么计数器没有达到创建或更多的3个意图。
答案 0 :(得分:1)
从onOptionsItemSelected()
switch(item.getItemId()){
case R.id.another_intent:
Intent intent = new Intent(IntentExamples.this, IntentExamples.class);
startActivity(intent);
case android.R.id.home:
this.finish(); break;
default:
return false;
}
break;
之后没有startActivity()
,因此Activity
完成。所以最终(不一定立即!)调用onDestroy()
并执行COUNTER--
。
由于Activity
已调用finish()
,因此无法通过按BACK再次触及它 - 这个&#34;错误行为&#34;是我首先无法解释的。我已经准备好相信运行时最多会保留两个Activity
个实例并将所有其他实例存储在BackStack中。但是不能回去?必须有一个解释 - 我放心了我发现它:)
现在为什么COUNTER
在旋转设备后显示1而不是2?
这是因为方向更改(如所有configuration changes)导致所有Activity
个实例被销毁,并且显示的实例会立即重新创建。