Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中,使用Intent或静态方法从一个活动访问另一个活动的数据?_Java_Android - Fatal编程技术网

Java 在Android中,使用Intent或静态方法从一个活动访问另一个活动的数据?

Java 在Android中,使用Intent或静态方法从一个活动访问另一个活动的数据?,java,android,Java,Android,从一个活动到另一个活动访问数据的最佳方式是什么? 1.将该变量设为静态变量,而不是在另一个类或另一个活动中使用它的类名访问它,因为它是Java功能。 2.使用意图方法,因为它是Android功能 哪一个是最好的 我学到的是,我们必须使用尽可能多的意图和我们传输的数据,在静态中,我们只是声明变量static 所以请澄清我的疑问避免在活动中使用静态方法,这在大多数情况下是危险的,在android中不被视为良好的设计实践。您可以使用以下任一方法在活动、服务等之间传输数据 StartActivityFo

从一个活动到另一个活动访问数据的最佳方式是什么? 1.将该变量设为静态变量,而不是在另一个类或另一个活动中使用它的类名访问它,因为它是Java功能。 2.使用意图方法,因为它是Android功能

哪一个是最好的

我学到的是,我们必须使用尽可能多的意图和我们传输的数据,在静态中,我们只是声明变量static


所以请澄清我的疑问

避免在活动中使用静态方法,这在大多数情况下是危险的,在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();
      }
    }