Android-为什么一种设备类型上的活动上下文突然为空

Android-为什么一种设备类型上的活动上下文突然为空,android,null,android-context,Android,Null,Android Context,我一直在开发一款应用程序,它突然无法在我的DroidX2测试设备上运行,但在其他所有设备上都能正常工作。我试过打开和关闭手机,删除应用程序的现有副本并重新安装,最后我真的去做了一个工厂重置,但不管什么原因,当主要活动去实例化我使用的上下文时,它会出现空值,但它只在一个设备上执行,而没有其他设备 我检查了我的舱单标志,我很确定不是这样的 当我调试并逐步浏览应用程序时,我注意到从oncreate到onResume,当我使用上下文作为方法时,它会显示为null,但只有在droid x2上运行它时才会出

我一直在开发一款应用程序,它突然无法在我的DroidX2测试设备上运行,但在其他所有设备上都能正常工作。我试过打开和关闭手机,删除应用程序的现有副本并重新安装,最后我真的去做了一个工厂重置,但不管什么原因,当主要活动去实例化我使用的上下文时,它会出现空值,但它只在一个设备上执行,而没有其他设备

我检查了我的舱单标志,我很确定不是这样的

当我调试并逐步浏览应用程序时,我注意到从
oncreate
onResume
,当我使用上下文作为方法时,它会显示为null,但只有在droid x2上运行它时才会出现。它不会在任何其他设备上这样做

最奇怪的是,这在今天之前从未发生过,而且我已经三天没有对代码做任何更改了。事实上,这只是过去几个小时的问题

以下是失败时的日志:

02-20 19:30:12.354: E/AndroidRuntime(21483): java.lang.RuntimeException: Unable to resume activity {graffit.main/graffit.main.MyView}: java.lang.NullPointerException
02-20 19:30:12.354: E/AndroidRuntime(21483):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2208)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2228)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1721)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at android.app.ActivityThread.access$1500(ActivityThread.java:124)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at  android.os.Handler.dispatchMessage(Handler.java:99)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at android.os.Looper.loop(Looper.java:130)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at android.app.ActivityThread.main(ActivityThread.java:3806)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at java.lang.reflect.Method.invokeNative(Native Method)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at java.lang.reflect.Method.invoke(Method.java:507)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at dalvik.system.NativeStart.main(Native Method)
02-20 19:30:12.354: E/AndroidRuntime(21483): Caused by: java.lang.NullPointerException
02-20 19:30:12.354: E/AndroidRuntime(21483):    at graffit.main.MyView.onResume(MyView.java:728)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at android.app.Activity.performResume(Activity.java:3912)
02-20 19:30:12.354: E/AndroidRuntime(21483):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2191)
02-20 19:30:12.354: E/AndroidRuntime(21483):    ... 12 more
当我登录并且MyView活动应该打开但上下文为空时,就会发生崩溃。我知道,因为我调试了这个方法,在我使用上下文的代码中,我看到了它的null

@Override
protected void onResume() {
    super.onResume();
    try{
    System.gc();
    myContext.startGpsListener();
    //Log.w("curLoc is from"+myContext.curLoc.getProvider(),"thats it");
    }catch(Exception e){
        e.printStackTrace();
    }
    if(getIntent().hasExtra("UID")){
        curr_uid = getIntent().getStringExtra("UID");
        curr_rid = getIntent().getStringExtra("RID");
        curr_profimg = getIntent().getStringExtra("imagepath");
        curr_usrname = getIntent().getStringExtra("UsrName");
        myContext.setUserInfo(curr_uid, curr_usrname);<-------------failure here
    }
@覆盖
受保护的void onResume(){
super.onResume();
试一试{
gc();
myContext.startGpsListener();
//w(“curLoc来自”+myContext.curLoc.getProvider(),“就是它”);
}捕获(例外e){
e、 printStackTrace();
}
if(getIntent().hasExtra(“UID”)){
curr_uid=getIntent().getStringExtra(“uid”);
curr_rid=getIntent().getStringExtra(“rid”);
curr_profimg=getIntent().getStringExtra(“imagepath”);
curr_usrname=getIntent().getStringExtra(“usrname”);

myContext.setUserInfo(curr\u uid,curr\u usrname);太奇怪了……在我的代码没有任何更改的情况下,应用程序终于重新开始工作。可能是后台运行的某个Verizon间谍软件干扰了我的应用程序。

你在哪里初始化
myContext
?既然你在活动中,请调用startGpsListener();直接调用System.gc()并在可能的情况下调用方法

中的最后一条语句自开始工作以来,可能会在将来再次停止,因此请处理此问题,使您的代码不会受到影响。是的,我正在研究它,但它是我认为某些设备可能刚刚遇到的幻影错误之一。它可能与调试器有关,也可能在eclipse中运行。我想我应该是这样的我要解释一下……我使用了一个扩展的自定义上下文来保存其他信息。它现在在设备上运行良好,但在过去的4个小时里,由于某种原因它被破坏了,上下文什么也保存不了。但就像魔术一样,它又开始工作了。我尝试在我的onresume中重新实例化它,但失败了,它甚至无法保存con这里也有文本。我猜这只是那些奇怪的幻影错误之一。是的,我会尝试使用它来确保在我的简历的早期没有任何东西被清除。在这里你调用
System.gc()
在这里不重要。任何可以通过强引用引用的内容都不能被GCD引用,因此它肯定与您的问题无关。您为什么还要调用System.gc()首先,除非你的应用程序是一个实时游戏,并且你想尽量减少GC造成的小延迟在不方便的时间发生的变化,否则很少有人会关心实际强制GC发生。如果你的内存耗尽,你可以打赌你的ass GC会在抛出OutOfMemoryException之前发生不管你是否明确要求。