欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Android static靜態(tài)成員變量的使用誤區

static 修飾的靜態(tài)變量,使用很方便,在不同的類(lèi)和包中都可以使用,在虛擬機中單獨占用內存,沒(méi)錯,這些都是它們的優(yōu)點(diǎn),不過(guò)在項目上線(xiàn)后,才發(fā)現static有一些不太好的地方。
在查看項目的崩潰信息時(shí),發(fā)現很多地方莫明的出現空指針異常的錯誤,經(jīng)過(guò)排查,發(fā)現可能就是static的問(wèn)題。我們在項目中,將用戶(hù)的信息也就是User對象保存成了一個(gè)靜態(tài)變量,而在報錯的地方,也都發(fā)現有使用過(guò)這種變量,因此,可以大致推斷出與這種保存的方式有一定的聯(lián)系。同時(shí),有不少用戶(hù)反映在打開(kāi)應用的情況下,接個(gè)電話(huà)或者長(cháng)時(shí)間待機后,再回到應用也會(huì )出現崩潰的現象,而這些崩潰都與靜態(tài)變量的空指針有關(guān)系。
如此來(lái)說(shuō)的話(huà),static靜態(tài)修飾在A(yíng)ndroid的開(kāi)發(fā)中是不是很危險?或許我們可以說(shuō)如果是static User u = new User();這樣定義的話(huà),那么應該不會(huì )有太大問(wèn)題,而如果是static User u;這樣定義的話(huà),那么很可以會(huì )出現NULL的現象。當然,前面的方法里面的屬性也可能會(huì )現空的情況,但是這個(gè)可以用封裝來(lái)避免空指針。另外靜態(tài)常量還是很好用的。
那么應該如何保存登錄或者全局的信息呢?根據Google官方的推薦以及百度到的各位大神的推薦,我們應該盡量使用繼承自Application的自定義類(lèi),在我們繼承的類(lèi)中定義需要全局使用的變量,并通過(guò)getApplicationContext()來(lái)獲取和保存相關(guān)的變量即可。實(shí)例:

  1. package com.jony.bitmaptest;  
  2.   
  3. import android.app.Application;  
  4. import android.os.Handler;  
  5.   
  6. public class MyAplication extends Application{  
  7.     // 引發(fā)異常:在一些不規范的代碼中經(jīng)??吹紸ctivity或者是Service當中定義許多靜態(tài)成員屬性。這樣做可能會(huì )造成許多莫名其妙的null pointer異常。  
  8.       
  9.     // 異常分析:Java虛擬機的垃圾回收機制會(huì )主動(dòng)回收沒(méi)有被引用的對象或屬性。在內存不足時(shí),虛擬機會(huì )主動(dòng)回收處于后臺的Activity或Service所  
  10.     // 占用的內存。當應用再次去調用靜態(tài)屬性或對象的時(shí)候,就會(huì )造成null pointer異常  
  11.       
  12.     // 解決異常:Application在整個(gè)應用中,只要進(jìn)程存在,Application的靜態(tài)成員變量就不會(huì )被回收,不會(huì )造成null pointer異常  
  13.     private static final int MSG = 0X1;  
  14.     private Handler mHandler = new Handler(){  
  15.         public void handleMessage(android.os.Message msg) {  
  16.             switch (msg.what) {  
  17.                 case MSG:  
  18.                       
  19.                     break;  
  20.   
  21.                 default:  
  22.                     break;  
  23.             }  
  24.         };  
  25.     };  
  26.     private String action;  
  27.     private String username;  
  28.     private String password;  
  29.     @Override  
  30.     public void onCreate() {  
  31.         // TODO Auto-generated method stub  
  32.         super.onCreate();  
  33.     }  
  34.     public String getUsername() {  
  35.         return username;  
  36.     }  
  37.     public void setUsername(String username) {  
  38.         this.username = username;  
  39.     }  
  40.     public String getPassword() {  
  41.         return password;  
  42.     }  
  43.     public void setPassword(String password) {  
  44.         this.password = password;  
  45.     }  
  46.     public String getAction() {  
  47.         return action;  
  48.     }  
  49.     public void setAction(String action) {  
  50.         this.action = action;  
  51.     }  
  52.     public Handler getHandler(){  
  53.         return mHandler;  
  54.     }  
  55. }  

在A(yíng)ctivity或Service中的使用方法:

  1. MyApplication application = (MyApplication) this.getApplicationContext();   

Application是與應用同時(shí)存在的,也就是應用在它就在,并不會(huì )被GC給莫名其妙的回收掉,因此,使用此方法更加安全。

鏈接地址

http://www.2cto.com/kf/201205/133951.html

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Action對象
[z]android 應用程序Activity之間數據傳遞與共享的幾種途徑
Android的intent之間復雜參數的傳遞
Android NDK C++開(kāi)發(fā)注意事項總結
C#判斷程序是否運行的方法
基于TestNG+Mockito及自動(dòng)裝配注解的Spring MVC集成測試
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久