Articles of 静态

Android中的静态字段

我在android和java开发新手,我想了解一些事情。 在活动和片段之间使用静态字段传输数据是不好的做法吗? 对我来说,这比在意图中使用临时演员要容易得多。 为什么很多程序在构造函数和方法中使用上下文作为参数,当我们可以使用静态字段对应用程序上下文进行一点访问? 例如: public class ApplicationLoader extends Application { public static volatile Context context; @Override public void onCreate() { super.onCreate(); context = getApplicationContext(); } } 所以有人可以解释,在哪些情况下应该使用android中的静态字段(我的意思是适配器,列表,上下文等类)? 而当使用非静态字段,getters / setters,额外的意图是更好的方式,然后静态字段?

Android中的静态安全吗?

我在我的代码中使用了一个静态类,它定义了一个静态字段,我在Activity onStop / onStart调用之间重用。 这是一个场景: 用户点击“授权”button(静态数据被初始化) 活动停止,Web浏览器被调用 浏览器执行callback,恢复活动(静态数据被重用) 至less我的一个用户在步骤3报告失败,我无法重现,但看起来像静态数据的重置 有什么build议么?

有时从后台返回到应用程序,单身保存的静态数据为空

我使用经典的单例模式来存储从我的初始活动(splash活动)中的webServices获得的数据,然后在整个应用程序中访问它。 我有一个导致MainActivity的splash活动,它是里面有片段的滑动菜单活动,最初的片段是一个包含支持映射片段的片段。 我的问题是存储在单身人士内部的数据,有时当应用程序转到后台(按住home并移动到另一个应用程序),然后转到最近的应用程序并select我的应用程序,单身人士的数据是空的,这会导致我的应用程序崩溃。 我已经花了几个小时检查我的单例是否应该写入,如果我没有把它自己写成null,那么静态数据变成null的可能原因是什么。 在我的search后,我发现了一个很好的和简单的解释,解释何时/为什么一个静态数据可以成为null – Android静态对象生命周期 @Samuh答案和我引用 “所以,如果你创build一个android应用程序并初始化一个静态variables,它将一直保留在JVM中,直到发生以下情况之一:1.类被卸载2. JVMclosures3.进程死亡” 关于#1和#2 – 我不知道什么时候发生。 关于#3 – 这是非常好的,好像用户将从“最近的应用程序”中点击我的应用程序,这将调用启动器活动在我的情况下“飞溅的活动”,这将从服务器获取数据(最新),再次存储在我的单身 – 完美! ,这正是我的其他应用程序内发生的,不同的是我没有使用滑动菜单和片段,只有活动。 在我的情况下,从后台返回将不会调用启动器活动这是“闪屏”,但将调用MainActivity(主滑动菜单活动)连同初始片段,当我尝试从我的单身访问数据所有数据里面它是空的,单身本身不是null,因为在片段的onCreate()我使用getInstance()我相信这意味着单身已经丢失,现在重新创build没有数据,所以如果过程是为什么我没有回到发射器的活动? 希望有人能提前帮助,谢谢。 我的单身class: public class MySingleton { // some private data members with getters/setters private String x,y,z; // the instance private static MySingleton theInstance = null; //private ctor private MySingleton(){ //doing something } //get instance public […]

Android中公共静态variables的生命周期是什么?

我有一个简单的类来保留一些variables,以在我的游戏活动之间分享它们,例如: public class TheGlobals { public static boolean IsFullGame = false; } 现在,当游戏启动时,初始活动是MainMenu,它决定用户是否购买了完整的游戏,并相应地设置variables。 例如,如果用户购买了游戏,则可以 TheGlobals.IsFullGame = true; 到现在为止还挺好。 从这里,用户点击“播放”并切换到发生主游戏动作的游戏活动。 在这个第二(游戏)活动中,有几个地方通过访问全局静态variables来检查它是完整/购买的游戏,并相应地启用或禁用某些function。 现在,用户播放并在某个点击中主页button或切换到其他应用程序。 过了一段时间后,用户回到我的游戏,从最近的应用程序启动它,从而打开他们离开的游戏,直接在第二个(游戏)活动,用户愉快地继续玩。 我是否正确地认为,在这一点上,我的全局静态variables的值可以是True或False,取决于进程是否被销毁,或者是否有任何保证,Android将恢复其价值。 我在想,如果这个过程保持活跃,那么价值将保持为真(就像在第一个活动中设定的那样),并且只要这个过程保持活跃,它就会被保留下来。 或者如果进程被销毁,并且用户稍后再回来,并且在第二个(Game)活动中直接打开我的游戏,那么在这种情况下,全局静态variables的值将默认为False(就像它在类中定义的那样级别,没有机会在第一次活动中设置)。 感谢您的任何意见。

清除静态数据onDestroy()

在我的应用程序中,有一个类声明了一些staticvariables。 问题是所有variables的值在应用程序被销毁时不会被重置。 有什么办法来重置所有的应用程序被破坏时,所有的静态variables的值除了单独重置在onDestroy() ?

Java.lang.IllegalStateException:应用程序PagerAdapter更改适配器的内容而不调用PagerAdapter#notifyDataSetChanged android

我想要使​​用静态类传递值到一个视图,而不是使用意图,因为我必须传递大量的数据。 有时我得到这个错误,并找不到什么是主要原因 错误: – java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 101, found: 200 我的寻呼机类 public class MemeDetailActivity extends AppCompatActivity implements OnDialogClickListner<Void> { private ViewPager mPager; private List<Datum> mList; private ScreenSlidePagerAdapter pagerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_meme_detail); mList = DataResult.getInstance().getData(); DataResult.getInstance().resetData(); if (mList != […]

从本机代码调用另一个包的静态Java方法

例如,假设在Android中,我需要调用静态方法android.os.SystemClock.elapsedRealtime() ,它从本机代码的一部分返回一个long。 在mylib.c文件中,我有 JNIEXPORT jlong JNICALL Java_com_mpackage_MyClass_nativeMethod(JNIEnv *env, jobject obj){ jclass cls = (*env)->GetObjectClass(env, obj); jmethodID mid = (*env)->GetStaticMethodID(env, cls, "android.os.SystemClock.elapsedRealtime", "(V)J"); if (mid == 0) return 0L; return CallStaticLongMethod(cls, mid); } 在java MyClass.class ,我有其他 static {System.loadLibrary("myLib");} native long nativeMethod(); 但是当我调用它时,我得到以下错误: ERROR/AndroidRuntime(628): java.lang.NoSuchMethodError: android.os.SystemClock.elapsedRealtime() 在中线的声明。 我认为这很简单,但我是jni的新手。 有人能指出我的错误吗?

recursion方法在java中用控制台工作,但不能用于android

我写了一个recursion方法,从string中的字符中获取所有可能的字符组合。 我也有一个方法来访问它,并返回一个组合列表: public static void uns(String word, StringBuilder s, List combos) { for(char c: word.toCharArray()) { s.append(c); if(word.length() != 1) { uns(removeChar(word, c),s,combos); } else { combos.add(s.toString()); } s.deleteCharAt(s.toString().length()-1); } } public static List getCombinations(String word) { List<String> combinations = new ArrayList<String>(); uns(word,new StringBuilder(),combinations); return combinations; } public static String removeChar(String s, char c) { […]

Android VM有可能在不杀死整个Android应用程序的情况下垃圾收集静态variables?

(标题是误导,因为垃圾收集器只收集对象,但我发现这个标题更直接) 假设我有一个名为“userid”的静态variables名为Global(在初始化时为null)的Android应用程序。 如果在Android应用程序生命周期中将“userid”variables设置为某个值,请说Global.userid =“myid”,这个variables在Android应用程序仍然活着的时候可能变为空吗? 换句话说,Android VM是否可以卸载Global类,并且由于内存不足而“杀死”这个全局静态variables而不杀死整个Android应用程序? 我担心的是,在应用程序运行时,由于内存不足,userid会突然变为null,从而导致整个应用程序崩溃。 编辑我误解了一些概念(在应用程序进程与活动之间)。 感谢所有的答案!

Java中的静态类(Android) – 使用或不使用

最近我已经开始在Android的Java开发。 我的想法是创build一个静态类,它将在开始时加载大量的东西,并将结果存储在应用程序的整个生命周期中。 我一直在阅读很多如何在活动之间分享对象,我认为最好是创build一个静态类。 你怎么看? 我应该用另一种方法吗? 我在问,因为我通过互联网阅读了很多反驳意见。 谢谢。