1.存储用户临时数据onSaveInstanceState()
当Activity由于内存不足而被回收时,临时数据丢失,为了避免这种情况要使用onSaveInstanceState()。
保存数据(用带一个参数的方法,此方法是AppCompatActivity的,个人认为兼容性比较好):
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String save ="要保存的数据";
outState.putString("data",save);
}
恢复数据:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main8);
if(savedInstanceState != null){
String data = savedInstanceState.getString("data");
}
}
2.技巧:知晓当前在哪一个活动
当接手一份不是自己写的代码时,此技巧的作用十分的突出。
创建一个Activity,重写onCreate()方法,让其它的Activity来继承此Activity。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main8);
Log.d("Activity", getClass().getSimpleName());
}
3.技巧:随时随地退出程序
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();
/**
* 添加activity
* @param activity
*/
public static void addActivity(Activity activity) {
activities.add(activity);
}
/**
*删除activity
*/
public static void removeActivity(Activity activity) {
activities.remove(activity);
}
/**
* 删除list中所有的activity
*/
public static void finishAll() {
for (Activity activity : activities) {
if(!activity.isFinishing()){
activity.finish();
}
}
}
}
使用
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}
4.技巧:activity传值
当AActivity是你写的,而BActivity不是你写的。你需要从A向B传值,这时你不知道B需要什么值。为了解决这个问题,我们需要在B中创建一个静态的方法来接受需要的参数。
/**
* @param context
* @param name 模拟需要的参数
* @param id 模拟需要的参数
*/
public static void actionStart(Context context, String name, int id) {
Intent intent = new Intent(context,BActivity.class);
intent.putExtra("name", name);
intent.putExtra("id", id);
context.startActivity(intent);
}
在A中使用
but_jump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BActivity.actionStart(AActivity.this,"名字",1);
}
});
这样我们就能够很容易的知道B需要什么。