hlu*_*kyi 9 java static android
我是android和java开发的新手,我想了解一些事情.
在活动和片段之间使用静态字段传输数据是不好的做法吗?对我来说,它比在意图中使用额外更容易.
当我们可以将静态字段用于应用程序上下文的一点访问时,为什么许多程序在构造函数和方法中使用上下文作为参数?例如:
public class ApplicationLoader extends Application {
public static volatile Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
Run Code Online (Sandbox Code Playgroud)那么有人可以解释一下,在哪种情况下应该在android中使用静态字段(我的意思是适用于类,如适配器,列表,上下文等)?当使用非静态字段,getter/setter时,额外的意图比静态字段更好吗?
使用静态字段在活动和片段之间传输数据是不好的做法吗?
一般来说,是的。当然有一些使用静态数据成员的Android模式,但是对于“传输数据”,很少使用它们,这是因为在大多数编程语言中,全局变量被认为是不良形式的所有经典原因。
主要的例外是,当活动在同一应用程序中并且要传递的数据太大而不能放入额外数据时,或者数据类型不能额外放入。即使那样,您也可以采用更灵活的方法来获得更好的收益(例如,使用某个对象缓存的静态单例管理器,共享数据,使用其他对象传递ID或密钥以访问缓存)。
对我来说,这比在意图中使用额外功能容易得多。
您无需使用额外功能即可将活动与片段进行通信,反之亦然。最多,您将Extras用作活动之间传递数据的一部分。
除此之外,太多没有经验的开发人员将今天的痛苦看成是“明天所有痛苦的总和”。换句话说,已经多次证明了使用全局变量来减少程序随时间的可维护性。您可能现在不在乎。您的同事在乎。你老板在乎 当您尝试维护今天编写的代码时,您会关心的未来。
什么时候可以使用静态字段对应用程序上下文进行单点访问?
除其他原因外,经常错误Context使用。仅在确切Application知道为什么使用实例适合这种情况的情况下,才使用实例。例如,从(例如,通过)创建UI 经常会给您错误的结果。ApplicationContextApplicationLayoutInflater
戴夫史密斯(Dave Smith)的史诗性博客文章帮助概述了不同类型的角色的作用Context。
在哪种情况下应该在android中使用静态字段
尽可能避免它们。请在需要的地方少用它们。请记住,当您的应用程序不在前台时,您的进程可以随时终止,因此,如果您不想丢失数据,则静态数据成员需要作为以持久方式存储的数据的缓存。
我的意思是对于适配器,列表,上下文等类
假设按“列表”的意思ListView是,恕我直言,使用静态数据成员不适用于任何情况。
- 这是不好的做法......
是.Activity并且Fragment是瞬态对象.他们来来去去.在a的情况下Activity,它在需要时由框架自动创建.您的应用可以同时Activity创建同一类的多个实例,具体取决于您的应用程序设计方式以及用户任务/后台堆栈的状态.在这些情况下,static跟踪单个内容Context会破坏应用程序中的内容.
- 为什么许多程序使用上下文
这是因为Context对象的性质.这是Android中最令人困惑的事情之一.并非所有Context对象都是相同的.在Context返回的getApplicationContext()是为您的应用单; 但是,每个Activity和Service实例都是一个单独的实例,Context并且是瞬态的(见上文).要获得一个很好的解释,请参阅戴夫史密斯的这篇精彩文章:http://possiblemobile.com/2013/06/context/