在新活动开始时销毁MainActivity?

时间:2015-04-16 22:20:05

标签: android android-activity android-lifecycle

我有一个以ListView作为主Activity的Activity。当选择列表中的某个项目时,它会启动一个新活动,显示所选列表中有关该项目的详细信息。代码运行正常,相关细节如下:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.d("test","test");

    ListView listView=(ListView) findViewById(R.id.name_list);

    ListAdapter adapter=new SimpleAdapter(this,contactList,
            R.layout.list_item,new String[]{TAGS[2]},new int[]{R.id.list_name_display});

    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
            Intent intent=new Intent(MainActivity.this,SingleContactActivity.class);
            intent.putExtra(EXTRA_CONTACT_POSITION,position);
            startActivity(intent);
        }
    });
}

新创建的活动有主要活动作为其父项,所以当我完成查看后,按操作栏上的向上按钮返回列表视图。但是,Log.d(...)行告诉我每次进入详细信息活动,然后返回主活动,都会重新创建主要活动。

我不想要这个以及我读这个的方式:https://developer.android.com/training/basics/activity-lifecycle/stopping.html是主要活动应该在新活动开始时停止,然后开始然后按下向上按钮继续。有人知道我的主要活动被销毁的原因吗?

感谢您的帮助

编辑: 清单文件     

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".SingleContactActivity"
        android:label="@string/title_activity_single_contact"
        android:parentActivityName=".MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.jefe.jefecontacts.MainActivity" />
    </activity>
</application>

3 个答案:

答案 0 :(得分:4)

检查设备/模拟器中的开发人员选项。具体检查是否取消选中“不要保持活动”。

注意:您无法始终保证不会销毁父活动。如果系统内存不足,操作系统可能会终止父活动。在启动SingleContactActivity之前,您应该为此做好准备并将所有必要数据保存在父活动中。

答案 1 :(得分:1)

  

我不想要这个。 。

太糟糕了。这是它的工作原理,你无法做任何事情。

请注意,这并不总是发生。但可能总是会发生,您必须编写应用程序,以便可以销毁所有活动并以透明方式重新创建用户。这正是“不要保持活动”开发人员选项的用途。一个表现良好的应用程序将与打开的选项完美配合。

答案 2 :(得分:1)

嗯...你可以做的是,在新活动中显示信息,使用对话框。这样您的活动就会保持活动状态,因此无法重新创建。

如果您想全屏显示,可以使用:MyDialog = new Dialog(mContext, android.R.style.Theme_NoTitleBar_Fullscreen);

使用您自己的布局:MyDialog.setContentView(R.layout.myLayout);

添加按钮(如后退按钮):final Button myBackButton = (Button)MyDialog.findViewById(R.id.my_back_button);

并使用它们:

myBackButton.setOnClickListenernew View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MyDialog.dismiss();
    }
});

或覆盖键:

MyDialog.setOnKeyListener(new Dialog.OnKeyListener() {

        @Override
        public boolean onKey(DialogInterface arg0, int keyCode,
                KeyEvent event) {
            // TODO Auto-generated method stub
            if (keyCode == KeyEvent.KEYCODE_BACK) {  //Back key pressed
                MyDialog.dismiss();
            }
            return true;
        }
    });

希望这会帮助你;)