美文网首页
Activity被回收了怎么办?

Activity被回收了怎么办?

作者: yaya_pangdun | 来源:发表于2016-03-28 22:18 被阅读1718次

当一个activity被回收之后,又返回这个activity时,会重新调用onCreate方法,此时,保存在activity的数据都会消失。我们重写onSaveInstanceState方法就可以保存临时数据了。

@Override
protected void onSaveInstanceState(Bundle outState){
  super.onSaveInstanceState(outState);
  String tempData = "Something you just typed";
  outState.putString("data_key", tempData);
}
//我们可以在onCreate方法中取得保存的全部数据
@Override
protected void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  if(savedInstanceState != null) {
     String tempData = savedInstanceState.getString("data_key"); 
   }
}

Activity的启动模式

//Activity有四种启动模式standard、singleTop、singleTask、singleInstance。
//可以在AndroidManifest.xml中给<activity>标签指定android:launchMode属性来选择启动模式

小知识

getTaskId() 可以返回当前栈的id
getClass().getSimpleName(); //获取当前实例的类名

管理所有的Activity

public class ActivityCollector {
  public static List<Activity> activities = new ArrayList<Activity>();
  public static void addActivity(Activity activity) {
    activities.add(activity);
  }

  public static void removeActivity(Activity activity) {
    activities.remove(activity);
  }

  public static void finishAll() {
    for (Activity activity : activities) {
      if(!activity.isFinishing()) {
        activity.finish();
      }
    }
  }
}
#通过继承,我们可以改写方法,使我们新建的类能管理
public class BaseActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityCollector.addActivity(this);
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    ActivityCollector.removeActivity(this);
  }
}
#我们经常要启动一个Activity,但是也许是别人写的,我们不知道要传什么参数,
#写一个函数actionStart看参数列表就知道传什么样的参数了
public static SecondActivity extends BaseActivity {
  public static void actionStart(Context context, String data1,String data2) {
    Intent intent = new Intent(context, Second.class);
    intent.putExtra("param1", data1);
    intent.putExtra("param2", data2);
    context.startActivity(intent);
  }
}
  SecondActivity.actionStart(FirstActivity.this, "data1", "data2");

相关文章

  • Activity被回收了怎么办?

    当一个activity被回收之后,又返回这个activity时,会重新调用onCreate方法,此时,保存在act...

  • Activity-Activity被回收之后的处理

    1、当Activity处于停止状态被回收了之后,再回到这个Activity还是会正常显示,只不过这时并不会执行on...

  • 2018-06-06

    原来Activity切换到后台之后,由于内存不够,此Activity被系统回收了,一段时间之后回到该应用程序,Ac...

  • Android: Activity生命周期的启动和销毁

    onStart 在activity能够被用户看到时回调的方法。 onResume 在activity获取焦点,能与...

  • java.lang.IllegalStateException:

    最近在使用DialogFragment的时候偶尔遇到了这么一个异常: 原因可能是Activity页面可能被回收了,...

  • 被暴力催收了,怎么办?

    “手机通讯录被打爆”, “每天有二十多个电话打进来”, “打电话告诉你的家人,说你被绑架了”, “同样打爆了你亲戚...

  • 2019-06-04

    Activity的生命周期 正常的流程: onCreate():被创建的时候被回调, onStart():Acti...

  • 段子:获奥斯卡影帝的守门员和球员

    守门员:卧槽球来了怎么办?怎么办?收了2000万不能拦! 球员:卧槽这逼他没拦怎么办?收了5000万也不能进啊! ...

  • Activity的生命周期

    一.Activity的方法的介绍 onCreate : 该方法是在Activity被创建时回调,它是生命周期第一个...

  • 后台的 Activity 被系统回收怎么办

    你后台的Activity被系统回收怎么办:onSaveInstanceState 当你的程序中某一个Activit...

网友评论

      本文标题:Activity被回收了怎么办?

      本文链接:https://www.haomeiwen.com/subject/clfrlttx.html