为什么在Android中不保留Intents

时间:2017-08-16 16:25:05

标签: java android android-intent

我正在测试我的手机可以并行创建多少意图,但只创建了一个......

这是我的应用清单

<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个意图。

1 个答案:

答案 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个实例被销毁,并且显示的实例会立即重新创建。