Java 在Android中,使用Intent或静态方法从一个活动访问另一个活动的数据?
从一个活动到另一个活动访问数据的最佳方式是什么? 1.将该变量设为静态变量,而不是在另一个类或另一个活动中使用它的类名访问它,因为它是Java功能。 2.使用意图方法,因为它是Android功能 哪一个是最好的 我学到的是,我们必须使用尽可能多的意图和我们传输的数据,在静态中,我们只是声明变量staticJava 在Android中,使用Intent或静态方法从一个活动访问另一个活动的数据?,java,android,Java,Android,从一个活动到另一个活动访问数据的最佳方式是什么? 1.将该变量设为静态变量,而不是在另一个类或另一个活动中使用它的类名访问它,因为它是Java功能。 2.使用意图方法,因为它是Android功能 哪一个是最好的 我学到的是,我们必须使用尽可能多的意图和我们传输的数据,在静态中,我们只是声明变量static 所以请澄清我的疑问避免在活动中使用静态方法,这在大多数情况下是危险的,在android中不被视为良好的设计实践。您可以使用以下任一方法在活动、服务等之间传输数据 StartActivityFo
所以请澄清我的疑问避免在活动中使用静态方法,这在大多数情况下是危险的,在android中不被视为良好的设计实践。您可以使用以下任一方法在活动、服务等之间传输数据
StartActivityForResults
方法(在活动之间交换数据)startActivityForResult
而不是startActivity
启动第二个活动
在第二项活动中,,
当您要完成并关闭第二个活动并将结果返回给前一个活动时:-
Intent result=new Intent();
result.putExtra("var1",data1);
result.putExtra("var2", data2);
setResult(Activity.RESULT_OK, result);
finish();
在活动之间发送数据的静态方法非常危险。
您可以使用Extras进行发送,并从Bundle获取它。活动中的静态变量很容易导致内存泄漏。即使活动的生命周期结束,静态变量仍将保留在内存中。因此,如果您想要传递对象,您可以在对象实现Parcelable(Serializable接口较慢)的地方传递内部意图,或者使用WeakReference的HashMap的单例类 e、 g
公共类数据持有者{
私有静态最终数据持有者=新数据持有者();
公共静态数据持有者getInstance(){return holder;}
映射数据=新的HashMap();
无效保存(字符串id、对象){
data.put(id,新WeakReference(object));
}
对象检索(字符串id){
WeakReference objectWeakReference=data.get(id);
返回objectWeakReference.get();
}
}
然后您可以像这样保存/检索
DataHolder.getInstance().save(id,object)
DataHolder.getInstance().retrieve(id)
由于hashmap只保存对对象的弱引用,垃圾收集可以收集那些未引用的对象
(强引用对象的静态HashMap也是一个危险的内存泄漏源)它有多危险?大多数情况下,该方法不会与活动生命周期相关联,因此应用程序中可能存在许多NullPointerException,根据设计,它们也可能导致活动中的内存泄漏。这有多危险?
public class DataHolder {
private static final DataHolder holder = new DataHolder();
public static DataHolder getInstance() {return holder;}
Map<String, WeakReference<Object>> data = new HashMap<String, WeakReference<Object>>();
void save(String id, Object object) {
data.put(id, new WeakReference<Object>(object));
}
Object retrieve(String id) {
WeakReference<Object> objectWeakReference = data.get(id);
return objectWeakReference.get();
}
}