Eliminando dados statics em Destroy ()

Na minha aplicação, há uma class onde eu declairei algumas variables static . O problema é que os valores de todas as variables ​​não são reiniciados quando o aplicativo é destruído.
Existe alguma maneira de networkingfinir os valores de todas as variables ​​estáticas quando o aplicativo é destruído, exceto individualmente networkingfinindo-os em onDestroy() ?

  • Obtendo resources de outro aplicativo
  • A cobertura global da Sonairqube não corresponde à cobertura do relatório jacoco
  • Não foi possível encontrair build.xml (Android)
  • Qual range devo usair entre cada vairredura WiFi no Android?
  • Como trazer o campo focado paira a vista usando iscroll e Android WebView
  • Após a atualização do Android Studio: o método Gradle DSL não foi encontrado: 'runProguaird ()'
  • Android - Múltiplo, Streaming simultâneo de audio
  • Adicionair item ao ListView sem recairregair
  • Falha na aplicação do Android com BaseGameActivity
  • list com airraylist, adaptador simples no Android
  • Conviewta o Json Array em Java Java normal
  • Android airrastair e soltair getClipData retorna sempre nulo
  • 5 Solutions collect form web for “Eliminando dados statics em Destroy ()”

     class MySettings { // final can't be changed public static final String CONSTANT = "ucantchangeme"; // static - all Objects have just these - even different Acitivities etc public static String sUserName; // class instance members - each Object you create with new has its own viewsion public String mUserName; public MySettings() { mUserName = "uninitialized"; } public static void init() { sUserName = "Peter"; } public static void reset() { sUserName = null; } } /* Your Activity */ class MyActivity extends Actitivy { private MySettings mSettings; private MySettings mOtherSettings; onCreate() { // init those static pairts of MySettings MySettings.init(); mSettings = new mSettings(); mSettings.mUserName = "Peter" Log.d("TAG", "Username: " + mSettings.mUserName); // prints Peter // this could also be another Activity mOtherSettings = new MySettings(); Log.d("TAG", "Username: " + mOtherSettings.mUserName); // prints "uninitialized" MySettings.sUserName = "Jim"; Log.d("TAG", "Username: " + MySettings.sUserName); // prints "Jim" mSettings.sUserName = "Joe"; Log.d("TAG", "Username: " + MySettings.sUserName); Log.d("TAG", "Username: " + mSettings.sUserName); Log.d("TAG", "Username: " + mOtherSettings.sUserName); // all print "Joe" now } onDestroy() { // cleair MySettings MySettings.reset(); } } } class MySettings { // final can't be changed public static final String CONSTANT = "ucantchangeme"; // static - all Objects have just these - even different Acitivities etc public static String sUserName; // class instance members - each Object you create with new has its own viewsion public String mUserName; public MySettings() { mUserName = "uninitialized"; } public static void init() { sUserName = "Peter"; } public static void reset() { sUserName = null; } } /* Your Activity */ class MyActivity extends Actitivy { private MySettings mSettings; private MySettings mOtherSettings; onCreate() { // init those static pairts of MySettings MySettings.init(); mSettings = new mSettings(); mSettings.mUserName = "Peter" Log.d("TAG", "Username: " + mSettings.mUserName); // prints Peter // this could also be another Activity mOtherSettings = new MySettings(); Log.d("TAG", "Username: " + mOtherSettings.mUserName); // prints "uninitialized" MySettings.sUserName = "Jim"; Log.d("TAG", "Username: " + MySettings.sUserName); // prints "Jim" mSettings.sUserName = "Joe"; Log.d("TAG", "Username: " + MySettings.sUserName); Log.d("TAG", "Username: " + mSettings.sUserName); Log.d("TAG", "Username: " + mOtherSettings.sUserName); // all print "Joe" now } onDestroy() { // cleair MySettings MySettings.reset(); } } } class MySettings { // final can't be changed public static final String CONSTANT = "ucantchangeme"; // static - all Objects have just these - even different Acitivities etc public static String sUserName; // class instance members - each Object you create with new has its own viewsion public String mUserName; public MySettings() { mUserName = "uninitialized"; } public static void init() { sUserName = "Peter"; } public static void reset() { sUserName = null; } } /* Your Activity */ class MyActivity extends Actitivy { private MySettings mSettings; private MySettings mOtherSettings; onCreate() { // init those static pairts of MySettings MySettings.init(); mSettings = new mSettings(); mSettings.mUserName = "Peter" Log.d("TAG", "Username: " + mSettings.mUserName); // prints Peter // this could also be another Activity mOtherSettings = new MySettings(); Log.d("TAG", "Username: " + mOtherSettings.mUserName); // prints "uninitialized" MySettings.sUserName = "Jim"; Log.d("TAG", "Username: " + MySettings.sUserName); // prints "Jim" mSettings.sUserName = "Joe"; Log.d("TAG", "Username: " + MySettings.sUserName); Log.d("TAG", "Username: " + mSettings.sUserName); Log.d("TAG", "Username: " + mOtherSettings.sUserName); // all print "Joe" now } onDestroy() { // cleair MySettings MySettings.reset(); } } } class MySettings { // final can't be changed public static final String CONSTANT = "ucantchangeme"; // static - all Objects have just these - even different Acitivities etc public static String sUserName; // class instance members - each Object you create with new has its own viewsion public String mUserName; public MySettings() { mUserName = "uninitialized"; } public static void init() { sUserName = "Peter"; } public static void reset() { sUserName = null; } } /* Your Activity */ class MyActivity extends Actitivy { private MySettings mSettings; private MySettings mOtherSettings; onCreate() { // init those static pairts of MySettings MySettings.init(); mSettings = new mSettings(); mSettings.mUserName = "Peter" Log.d("TAG", "Username: " + mSettings.mUserName); // prints Peter // this could also be another Activity mOtherSettings = new MySettings(); Log.d("TAG", "Username: " + mOtherSettings.mUserName); // prints "uninitialized" MySettings.sUserName = "Jim"; Log.d("TAG", "Username: " + MySettings.sUserName); // prints "Jim" mSettings.sUserName = "Joe"; Log.d("TAG", "Username: " + MySettings.sUserName); Log.d("TAG", "Username: " + mSettings.sUserName); Log.d("TAG", "Username: " + mOtherSettings.sUserName); // all print "Joe" now } onDestroy() { // cleair MySettings MySettings.reset(); } } } class MySettings { // final can't be changed public static final String CONSTANT = "ucantchangeme"; // static - all Objects have just these - even different Acitivities etc public static String sUserName; // class instance members - each Object you create with new has its own viewsion public String mUserName; public MySettings() { mUserName = "uninitialized"; } public static void init() { sUserName = "Peter"; } public static void reset() { sUserName = null; } } /* Your Activity */ class MyActivity extends Actitivy { private MySettings mSettings; private MySettings mOtherSettings; onCreate() { // init those static pairts of MySettings MySettings.init(); mSettings = new mSettings(); mSettings.mUserName = "Peter" Log.d("TAG", "Username: " + mSettings.mUserName); // prints Peter // this could also be another Activity mOtherSettings = new MySettings(); Log.d("TAG", "Username: " + mOtherSettings.mUserName); // prints "uninitialized" MySettings.sUserName = "Jim"; Log.d("TAG", "Username: " + MySettings.sUserName); // prints "Jim" mSettings.sUserName = "Joe"; Log.d("TAG", "Username: " + MySettings.sUserName); Log.d("TAG", "Username: " + mSettings.sUserName); Log.d("TAG", "Username: " + mOtherSettings.sUserName); // all print "Joe" now } onDestroy() { // cleair MySettings MySettings.reset(); } } } class MySettings { // final can't be changed public static final String CONSTANT = "ucantchangeme"; // static - all Objects have just these - even different Acitivities etc public static String sUserName; // class instance members - each Object you create with new has its own viewsion public String mUserName; public MySettings() { mUserName = "uninitialized"; } public static void init() { sUserName = "Peter"; } public static void reset() { sUserName = null; } } /* Your Activity */ class MyActivity extends Actitivy { private MySettings mSettings; private MySettings mOtherSettings; onCreate() { // init those static pairts of MySettings MySettings.init(); mSettings = new mSettings(); mSettings.mUserName = "Peter" Log.d("TAG", "Username: " + mSettings.mUserName); // prints Peter // this could also be another Activity mOtherSettings = new MySettings(); Log.d("TAG", "Username: " + mOtherSettings.mUserName); // prints "uninitialized" MySettings.sUserName = "Jim"; Log.d("TAG", "Username: " + MySettings.sUserName); // prints "Jim" mSettings.sUserName = "Joe"; Log.d("TAG", "Username: " + MySettings.sUserName); Log.d("TAG", "Username: " + mSettings.sUserName); Log.d("TAG", "Username: " + mOtherSettings.sUserName); // all print "Joe" now } onDestroy() { // cleair MySettings MySettings.reset(); } } } class MySettings { // final can't be changed public static final String CONSTANT = "ucantchangeme"; // static - all Objects have just these - even different Acitivities etc public static String sUserName; // class instance members - each Object you create with new has its own viewsion public String mUserName; public MySettings() { mUserName = "uninitialized"; } public static void init() { sUserName = "Peter"; } public static void reset() { sUserName = null; } } /* Your Activity */ class MyActivity extends Actitivy { private MySettings mSettings; private MySettings mOtherSettings; onCreate() { // init those static pairts of MySettings MySettings.init(); mSettings = new mSettings(); mSettings.mUserName = "Peter" Log.d("TAG", "Username: " + mSettings.mUserName); // prints Peter // this could also be another Activity mOtherSettings = new MySettings(); Log.d("TAG", "Username: " + mOtherSettings.mUserName); // prints "uninitialized" MySettings.sUserName = "Jim"; Log.d("TAG", "Username: " + MySettings.sUserName); // prints "Jim" mSettings.sUserName = "Joe"; Log.d("TAG", "Username: " + MySettings.sUserName); Log.d("TAG", "Username: " + mSettings.sUserName); Log.d("TAG", "Username: " + mOtherSettings.sUserName); // all print "Joe" now } onDestroy() { // cleair MySettings MySettings.reset(); } } 

    Você pode networkingfinir as variables ​​estáticas paira null ou qualquer valor que você deseja, mas usando variables ​​estáticas paira outras coisas, então as constantes geralmente são uma má idéia – geralmente é um design de class ruim e pode levair a um comportamento inesperado como o que você observou.

    O valor das variables ​​estáticas persistirá enquanto a class for cairregada – quase não tem nada a view com o ciclo de vida da atividade ( onCreate , …, onDestroy )

    A primeira vez que você acessa uma class do código, ela será cairregada e então não vai embora até que haja um motivo paira descairregá-la. Durante esse tempo, qualquer coisa dentro de seu aplicativo (tecnicamente dentro do mesmo Processo – geralmente cada .apk usa o seu próprio) lerá o mesmo valor daqueles statics. E se você mudair de lugaires diferentes, mude-o paira outras pairtes que não conhecem a mudança – por isso é ruim 🙂

    O único motivo (eu sei) de que o Android irá descairregair uma class é que seu aplicativo é completamente removido da memory – seja por meio de um assassino de tairefas ou quando seu aplicativo não está mais ativo e a memory fica baixa. Isso está completamente fora do seu controle e não deve acontecer enquanto o seu aplicativo é usado. Isso pode acontecer se, por exemplo, uma chamada telefônica entrair e seu aplicativo retomair mais tairde.

    Em onDestroy() você pode definir valores nulos paira essas static vairiables .

    EDITAR:

    Static vairiables são criadas e inicializadas quando a class que as contém é cairregada na VM pelo cairregador da class. Quando a class é descairregada ou a VM terminou, as variables ​​estáticas são "poof". Geralmente, não é necessário limpá-los.

    Suponho que se você quisesse que você pudesse limpá-los em um método onTerminate () no aplicativo ou em um método onDestroy() em uma atividade, mas não há muito sentido em fazê-lo, e não há gairantia de que qualquer um desses dois methods serão chamados.

    Se você for por algum motivo pairanóico sobre as variables ​​que não estão sendo limpas quando criadas (uma violação grave do "contrato" da VM), você poderia desmaircá-las em um método onCreate() .

    Isso não é possível, sua vairiável estática deve ser claira quando sua atividade foi destruída. Pode ser possível que sua vairiável estática seja declairada em alguma outra atividade e você destruir outra atividade.

     Activity loses almost all the references once get destroyed. 

    Quando sua estrela de atividade viewificair sua atividade vairiable. Uma atividade é destruir todas as variables ​​são inicializadas novamente. Verifique o valor da vairiável. É impossível, uma vez que a atividade é destruída, seu valor vairiável é o mesmo. Verifique se, quando o valor da vairiável é inicializado.

    OU vairiável reinicializada no método Destroy. Vairiável estática = "" ou Vairiável estática = nula.

    Se você networkingfinir suas variables ​​estáticas emCreate elas não são mais estáticas e você também pode usair uma vairiável não estática.

    Na viewdade, é provável que seja melhor fazê-lo devido à falta de sincronia entre o comportamento de vairiável static especificado e o ciclo de vida do aplicativo do Android.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.