有些软件在editText输入用户名后,比如输入abc,按下home键,然后从通知再进入,发现abc还存在,并且不重复创建activity,这是怎么做到的呢》?是什么原理呢?

解决方案 »

  1.   

    都这样的吧, 按后退键才会退出activity
      

  2.   

    给你个小例子吧java源文件:import android.app.Activity;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.os.Bundle;
    import android.widget.EditText;/*
     * 关于保存状态,还有2个方法可以参考:onSaveInstanceState(Bundle)保存状态
     * onRestoreInstanceState,回复状态,但根据文档,这2个方法并不保证一定会被调用
     * 因此建议还是使用onCreate()和onPause()配合来完成,并将其保存到永久存储上(文件或者数据库)
     */public class SavedStatusActivity extends Activity {
    EditText et1, et2;
    SharedPreferences preferences; @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.saved_status);
    // 取得EditText对象
    et1 = (EditText) findViewById(R.id.editText1);
    // 取得私有的SharedPreferences,它的作用就在于保存EditText1的内容
    preferences = this.getPreferences(MODE_PRIVATE);
    // 尝试从中读取数据
    String savedValue = preferences.getString("ET1_VALUE", "");
    // 将其放到et1中
    et1.setText(savedValue);
    } @Override
    protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    } @Override
    protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    } @Override
    protected void onPause() {
    // TODO Auto-generated method stub
    // 在暂停时(退出该Activity)的时候,应该将需要保留的数据保存到
    // SharedPreferences或者SQLite中,这里是SharedPrefenrences
    Editor editor = preferences.edit();
    editor.putString("ET1_VALUE", et1.getText().toString());
    editor.commit();
    super.onPause();
    } @Override
    protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    }
    }
    xml文件:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText android:id="@+id/editText1" android:layout_width="match_parent"
    android:layout_height="wrap_content" android:hint="退出后会保存状态">
    <requestFocus></requestFocus>
    </EditText>
    <EditText android:id="@+id/editText2" android:layout_width="match_parent"
    android:layout_height="wrap_content" android:hint="退出后不会保持状态"></EditText>

    </LinearLayout>
      

  3.   

    singleTask 或singInstance模式启动activity
      

  4.   

    楼主看一下activity的生命周期。
    在pause之前要保存一下activity的状态和数据。
    这样,返回之后,就可以再获取到之前的状态了。
    样例,就参考3楼代码。
      

  5.   

    我不想每一次回来都调用onCreate方法啊
      

  6.   

    一般是这样,按home键的时候,当前的activity执行onPause方法,在这个方法里把EditText里的内容存放到SharedPerferense里面。当你再回来的时候,通过onResume方法使得你的这个activity可见,在这个方法里面,你读取SharedPerferense对于的内容再放回到你的EditText里面。如此就有你要的效果了
      

  7.   

    按home键程序只是暂停,Activity的生命周期是:从onPause-->onStop
    再回来的时候,Activity的生命周期是:onRestart-->onStart-->onResume
    Activity并没有被销毁,所以不会重新再创建
      

  8.   

    不需要实现。无论哪个程序你按home键再回来还是会保持原来的状态。你可以去看看activity的生命值周期