2015-06-19 53 views
0

应用越来越空接近我有一个类定义为实例的Java类没有在安卓

public class ApiManager 
{ 
    private static ApiManager mInstance; 
    public static synchronized ApiManager getInstance() 
    { 
     return mInstance; 
    } 

    public ApiManager(Context mContext) 
    { 
     this.mContext = mContext; 
     mInstance = this; 
    } 
} 

我SplashActivity被定义为

public class SplashActivity extends BaseActivity 
{ 
    private String gcmRegId; 
    private GoogleCloudMessaging gcm; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
     notificationManager.cancelAll(); 

     try { 
      if(ApiManager.getInstance() != null) 
      { 
       /* Activity already present. We need to move to main activity */ 
       finish(); 
       Intent i = new Intent(this, MainActivity.class); 
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
       i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(i); 
       return; 
      } 
     } 
     catch (Exception e1) 
     { 
     } 

我的MainActivity的onDestroy被定义为

@Override 
    public void onBackPressed() 
    { 
     if(isFullScreen) 
     { 
      animateFullScreenClose(); 
      if (mainMapFragment.postLayout.getVisibility() == View.VISIBLE) 
       mainMapFragment.closePinDetails(); 
     } 
     else 
     { 
      MyApplication.getInstance().disconnectGoogleApi(); 
      SocketManager.getInstance().closeConnection(); 
      finish(); 
      MyApplication.getInstance().stopService(); 
     } 
    } 
} 

当我按下后退按钮。一切都应该停止。应用程序关闭。

然而,当我再次在Android上使用主菜单启动器图标打开应用程序,if(ApiManager.getInstance() != null)没有考虑到为空,而不是飞溅我结束了在mainActivity,

为什么ApiManager.getInstance()不为空,如果应用程序被关闭。

+0

当你按下返回按钮,你的应用程序进入onPause(),它不会停止。 –

+0

因为你从未将它设置为null? – immibis

+0

@immibis我的问题是,当应用程序关闭时,为什么它们不会为空。 –

回答

1

静态对象是每个进程。 ü关闭您的活动但你didnt关闭过程因此仍有价值ApiManager.getInstance以明确的价值,并再次返回到闪屏,只需手动清除对象在的onDestroyMainActivity的

onDestroy(){ ApiManager.clear(); }

public static void clear(){if(mInstance!= null){mInstance = null; }

+0

如果我尝试做一些像ApiManager.getInstance.setInstance(null),mInstance = null,它崩溃,为空指针,我这样做后完成 –

+0

请参阅我的编辑。这应该工作。 – EE66