色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

如何在Android studio 中使用單例模式

瀏覽:4日期:2022-09-20 14:52:33

本篇簡單介紹如何在Android studio中 使用單例模式和使用注意事項。

單例模式

為什么要使用單例模式?

有一些對象我們只需要一個,只需要一個線程池 、緩存或是只有一臺打印機、機器人 、機器人上面只有一個尋磁傳感器。我們可以通過全局的靜態變量來實現,但是全局變量在程序一開始就創建 可能比較耗費資源、可能一直沒用到。單例模式和全局變量一樣方便又沒有它的缺點。

單利模式使用

public class Sensor { // 使用靜態變量記錄唯一的實例 private static Sensor sensorInstance; /** * 私有的構造方法 */ private Sensor(){} /** * 實例化方法 * @return Sersor * synchronized包住不會有兩個線程同時進入 */ public static synchronized Sensor getSersorInstance(){ if(sensorInstance == null) { sensorInstance = new Sensor(); } // 返回Sensor唯一實例 return sensorInstance; }}

但是如果想要很急切的創建示例,而且在示例創建方面的負擔不繁重。

public class Sensor { private static Sensor sensorInstance = new Sensor(); private Sensor(){} public static Sensor getSersorInstance(){ return sensorInstance; }}

如果有很多線程頻繁的使用getSersorInstance可能就影響性能,可以使用雙重檢查加鎖

public class Sensor { // volatile 保證 sensorInstance 被初始化 多個線程正確的處理 private volatile static Sensor sensorInstance; private Sensor(){} public static Sensor getSersorInstance(){ // 檢查 sensorInstance是否存在 如果不存在就進入同步區塊if(sensorInstance == null) { // 同步區塊里面的代碼只有在第一次才會執行 synchronized(Sensor.class) {if(sensorInstance == null) { sensorInstance = new Sensor();} } } return sensorInstance; }}Android 中使用內存泄漏問題

1.在實例化的時候我們經常需要傳入一些參數 比如說 Context

然后順利成章的

Sensor sensor = Sensor.getSersorInstance(MainActivity.this);

然后出現了一個很嚴重的問題Sensor單例持有了MainActivity 的this對象,所以當我們轉跳其他Activity頁面的時候MainActivity 的對象仍然得不到釋放不能被回收。

所以我們應該使用Application中的 context

2.同樣在急切的方法中

public class Sensor { public static final Sensor SENSOR_INSTANCE = new Sensor(); private List<MyListener> mListenerList; private Sensor() { mListenerList = new ArrayList<MyListener>(); } public static Sensor getInstance() { return SENSOR_INSTANCE; } public void registerListener(MyListener listener) { if (!mListenerList.contains(listener)) {mListenerList.add(listener); } } public void unregisterListener(MyListener listener) { mListenerList.remove(listener); } } interface MyListener { public void onSomeThingHappen(); }

MainActivity:

public class MainActivity extends Activity { private MyListener mMyListener=new MyListener() { @Override public void onSomeThingHappen() { } }; private Sensor sensor = Sensor.getInstance(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sensor.registerListener(mMyListener); }}

非靜態的內部類(Sensor)的對象(mListenerList)都是會持有指向外部類對象(mMyListener)的引用。因此外部類對象(mMyListener)被持有了 同樣的不會被回收,內存泄漏,所以需要

@Override protected void onDestroy() { Sensor.unregisterListener(mMyListener); super.onDestroy(); }

以上就是如何在Android studio 中使用單例模式的詳細內容,更多關于在Android studio 中使用單例模式的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 6080伦理久久亚洲精品 | 欧美透逼视频 | 国产一级aaa全黄毛片 | 精品国产三级v | 亚洲精品视频在线看 | 亚洲欧美卡通成人制服动漫 | 欧美日韩一本 | 亚洲免费一区 | 亚洲天堂久久精品成人 | 精品国产三级a | 成年网在线观看免费观看网址 | 91视频99| 欧美ab片 | 欧洲亚洲一区 | 亚洲国产日韩欧美综合久久 | 中文字幕一区二区三区久久网站 | 亚洲综合综合在线 | 日本亚洲高清 | 免费一级欧美片在线观看 | 美女个护士一级毛片亚洲 | 精品成人毛片一区二区视 | 成人久久18免费网站入口 | 亚洲国产日韩女人aaaaaa毛片在线 | 男女很舒服爽视频免费 | 99九九99九九九视频精品 | 日本道综合一本久久久88 | 亚洲黄色第一页 | 午夜无遮挡怕怕怕免费视频 | 高清性色生活片欧美在线 | 热伊人99re久久精品最新地 | 国产一级视频播放 | 人人公开免费超级碰碰碰视频 | 欧美一级俄罗斯黄毛片 | 国产三级精品在线观看 | 成人国产精品高清在线观看 | 欧美俄罗斯一级毛片 | 在线观看的黄网 | 黄页网站18以下禁止观看 | 免费在线视频成人 | 九九色综合 | 成人久久18免费软件 |