導航:首頁 > 操作系統 > android單例

android單例

發布時間:2022-04-02 07:57:01

『壹』 android activity單實例化什麼意思

意思就是這個Activity只能有一個實例(如果被多次啟動的話)

manifest.xml裡面配置 在activity標簽下的屬性

android:launchMode="standard"
有4種可以選 默認就是上面這種,,標準的 每次startActivity都會實例化一個實例
還有3種:singleTop 啟動此模式的activity的時候 如果在堆棧頂部已經有這個activity的實例則不重新實例化,就用堆棧頂部這個 否則就實例化一個新的activity對象
singleTask 啟動此模式的activity的時候 如果在堆棧中存在此activity的實例(任意位置),則不重新實例化activity對象 而是直接復用之前的activity對象 在這個activity對象上面的其他activity對象全部移除(相當於這些activity被銷毀了);這個應該就是你說的單實例化
singleInstance 這個是單個實例 會單獨啟動一個堆棧來存放此啟動模式的activity實例!

『貳』 android 幾種單例模式的寫法

先不論單例模式的寫法,有些方面是相同的,比如都需要將唯一的對象設置為static的,都需要將構造方法private化,代碼如下:
public class MyInstance { private static MyInstance instance; private MyInstance(){}
}
第一種:最原始的單例模式,代碼如下:
public static MyInstance getInstance(){ if(instance==null){ instance=new MyInstance();
} return instance;
}
多線程並發時,可能會出現重復new對象的情況,因此不提倡使用。
第二種:將整個方法塊進行加鎖,保證線程安全。
public static synchronized MyInstance getInstance(){ if(instance==null){ instance=new MyInstance();
} return instance;
}

這種代碼下,每條線程都會依次進入方法塊內部,雖然實現了單例,但是影響了運行效率,可以使用但是也不怎麼提倡。
第三種:進一步優化的方法。
public static MyInstance getsInstance(){ synchronized (MyInstance.class){ if(instance==null){ instance=new MyInstance(); return instance;
}else{ return instance;
}
}
}

這種方式只是第二種方法的一種優化,但是優化有限。
(以下的幾種方法比較推薦使用)
第四種:雙層判斷加鎖,效率影響小且保證了線程安全。
public static MyInstance getsInstance() { if (instance == null) { synchronized (MyInstance.class) { if(instance==null){ instance=new MyInstance();
}
}
} return instance;
}

這種方法是對第二種和第三種方法的進一步優化,比較推薦使用。
第五種:內部類實現單例,不用線程鎖來實現效率的提升。
public class MyInstance { private MyInstance() {
} public static MyInstance getInstance(){ return MyInstanceHolder.instance;
} private static class MyInstanceHolder{ private static MyInstance instance=new MyInstance();
}
}

在內部類中new對象,再將內部類的對象返回,這種方法是使用了java中class載入時互斥的原理來實現了線程的安全。不加線程鎖也使得運行效率不會受到較大的影響。比較提倡。

『叄』 android service是單例嗎

android service不存在單列的問題,service是安卓一個組件。單例是一種設計模式。
1、在實際運行中同樣的Service的確只能有一個。
2、Service類沒有必要運用單例模式。

『肆』 android 單例Singleton可否用於多進程

單例模式(Singleton) 一、 什麼是單例模式 單例模式,簡單點來說就是設計一個類,使其在任何時候,最多隻有一個實例,並提供一個訪問這個實例的全局訪問點。 二、 為什麼要單例 在程序中的很多地方,只有一個實例是非常重要的

『伍』 安卓的service可以單例嗎

這要看你的service是通過什麼方式啟動的 一:如果你通過startService()方式啟動的話,那麼當你關閉了activity之後 你的service依然還在運行當中。 二:如果你通過bindService()方式啟動的話,那麼他是跟隨activity一起綁定的,那麼也就是說當activity銷毀的時候這個service也跟隨一起銷毀了! 你可以看看 application 這個也挺好使用的 ,可以當做全局的回調對象使用!

『陸』 android中什麼是單例模式

單例模式(Singleton)
一、 什麼是單例模式
單例模式,簡單點來說就是設計一個類,使其在任何時候,最多隻有一個實例,並提供一個訪問這個實例的全局訪問點。

二、 為什麼要單例
在程序中的很多地方,只有一個實例是非常重要的。例如,在windows中,任務管理器只有一個,無論你點擊多少次打開任務管理器,任務管理器也只會生成一個窗口。再例如,在一些軟體中,工具箱是唯一的,無論你點擊多少次打開工具箱,工具箱也只一個。

為什麼要這樣設計呢?因為像任務管理器或工具箱這樣的程序,只要有一個就足夠完成所有的工作了,多個程序只會白白消耗系統資源,而像任務管理器這類的程序還會引入多個任務管理器之間的同步問題,所以對些這些程序來說,只有一個實例或程序是必要的。

三、 為什麼需要單例模式
上面講到對於某些程序來說,保持其只有一個實例是必要的,但是如何保證一個程序或一個類只有一個實例呢?下面從類的角度來解說。

『柒』 如何使用android單例模式

java模式之單例模式:
單例模式確保一個類只有一個實例,自行提供這個實例並向整個系統提供這個實例。
特點:
1,一個類只能有一個實例
2,自己創建這個實例
3,整個系統都要使用這個實例

Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。在很多操作中,比如建立目錄
資料庫連接都需要這樣的單線程操作。一些資源管理器常常設計成單例模式。
外部資源:譬如每台計算機可以有若干個列印機,但只能有一個Printer
Spooler,以避免兩個列印作業同時輸出到列印機中。每台計算機可以有若干個通信埠,系統應當集中管理這些通信埠,以避免一個通信埠被兩個請求同時調用。內部資源,譬如,大多數的軟體都有一個(甚至多個)屬性文件存放系統配置。這樣的系統應當由一個對象來管理這些屬性文件。

一個例子:Windows
回收站。
在整個視窗系統中,回收站只能有一個實例,整個系統都使用這個惟一的實例,而且回收站自行提供自己的實例。因此,回收站是單例模式的應用。

兩種形式:
1,餓漢式單例類

public class Singleton {

private Singleton(){}

//在自己內部定義自己一個實例,是不是很奇怪?

//注意這是private 只供內部調用

private static Singleton instance =
new Singleton();

//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問

public static Singleton getInstance() {

return instance;

}

}

2,懶漢式單例類

public class Singleton {

private static Singleton instance = null;

public static synchronized Singleton
getInstance() {

//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次

//使用時生成實例,提高了效率!

if (instance==null)

instance=new Singleton();

return instance; }

}

第二中形式是lazy initialization,也就是說第一次調用時初始Singleton,以後就不用再生成了。

注意到lazy
initialization形式中的synchronized,這個synchronized很重要,如果沒有synchronized,那麼使用getInstance()是有可能得到多個Singleton實例。
一般來說第一種比較安全

我自己比較常用的方式:

public class Singleton {

private volatile static
Singleton singleton;

private Singleton(){}

public static Singleton getInstance(){

if(singleton==null){

synchronized(Singleton.class){

if(singleton==null){

singleton=new Singleton();

}

}

}

return singleton;

}

}

『捌』 如何完全退出單例模式下的android應用程序,非常好用

首先問題是這樣的,比如:我剛進入應用時有一個歡迎頁面(E),隨後進入主A,我從A->B->C->D,然後直接從D返回到A,在A中完全退出應用。對於android自帶的1.5 - 2.1以及2.2之後完全退出應用的API我都試了,但還是實現不了,有的是能退出,但是歡迎頁面就沒有了,可能是我的原因。 後來我是這樣實現的,當然有點老土,但還是能實現的。如下,同樣也歡迎拍磚

public class ExitApplication extends Application {
//存儲已打開的Activity集合
private List<Activity> list = new ArrayList<Activity>();

//單例的ExitApplication,目的是在任何的Activity中用的都是同一個集合
private static ExitApplication ea;

private ExitApplication(){

}
public static ExitApplication getInstance(){
if(null==ea){
ea = new ExitApplication();
}
return ea;
}

/**
* 添加Activity到集合中
*/
public void addActivity(Activity activity){
list.add(activity);
}

public void exit(Context context){

Dialog dialog = new AlertDialog.Builder(context).setTitle("確認退出")
.setMessage("確定退出該系統?")
.setPositiveButton("確定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
for(Activity activity:list){
activity.finish();
}
System.exit(0);
}
}).setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}

}).create();
dialog.show();
}
}
我這個必須是單例的,因為我要確保把每個UI都加進一個集合中,所以...,至於對單例有疑問的,可以上網查詢,
然後在每個Activity的onCreate方法中調用ExitApplication.getInstance().addActivity(this);,然後在處理退出請求中直接調用ExitApplication.getInstance().exit(this);即可。
轉載

『玖』 android 單例模式 什麼時候被殺死 單例的那個對象 什麼時候消失啊

我來補充下樓上:
進程關閉的時機是:
1.用Process.kill或者shell去殺死進程
2.系統通過memory策略來殺死後台進程。
說說第二種吧,當程序按Home鍵或者Back鍵退出後就變做後台進程。
另外,當程序啟動了新的進程。而新的進程進入前台模式,此時程序也變成後台進程。
當前台進程退出,後台進程按照堆棧結構再次呈現時。很可能是個重啟進程的過程,重啟進程意味著單例對象也重新初始化了。這點要尤其謹慎

『拾』 android單例中的監聽如何回調

1) OnClickListener 介面
此介面處理的是單擊事件,例如,在 View 上進行單擊動作,在 View 獲得焦點的情況下單擊「確定」按鈕或者單擊軌跡球都會觸發該事件。
當單擊事件發生時,OnClickListener 介面會回調 public void onClick(View v) 方法對事件進行處理。其中參數 v 指的是發生單擊事件的 View 組件。
2) OnLongClickListener 介面
此介面處理的是長按事件,當長時間按住某個 View 組件時觸發該事件。
其對應的回調方法為 public boolean onLongClick(View v),當返回 true 時,表示已經處理完此事件,若事件未處理完,則返回 false,該事件還可以繼續被其他監聽器捕獲並處理。
3) OnFocusChangeListener 介面
此介面用於處理 View 組件焦點改變事件。當 View 組件失去或獲得焦點時會觸發該事件。
其對應的回調方法為 public void onFocusChange(View v, Boolean hasFocus),其中參數 v 表示產生事件的事件源,hasFocus 表示事件源的狀態,即是否獲得焦點。
4) OnKeyListener 介面
此介面用於對手機鍵盤事件進行監聽,當View獲得焦點並且鍵盤被敲擊時會觸發該事件。
其對應的回調方法為 public boolean onKey(View v, int keyCode, KeyEvent event)。

閱讀全文

與android單例相關的資料

熱點內容
pso演算法優化參數 瀏覽:606
java打開pdf文件怎麼打開 瀏覽:369
用銀行家演算法拒絕死鎖的例題 瀏覽:670
洗盤選股指標源碼 瀏覽:705
百度雲盤下載的壓縮包怎麼解壓 瀏覽:737
加密類型是TKIP被我弄掉了 瀏覽:234
貝刻智能手環app如何下載 瀏覽:838
公司電腦上的加密文件解密 瀏覽:462
伺服器怎麼配置資料庫 瀏覽:889
壓縮機和製冷劑 瀏覽:182
樹莓派手機版編程 瀏覽:926
谷歌編程挑戰賽時間安排 瀏覽:438
自動學習機源碼 瀏覽:938
明日之後星曳鎮是什麼伺服器 瀏覽:474
編程學有年齡限制嗎 瀏覽:571
工程可靠度pdf 瀏覽:900
包子解壓玩具會爆嗎 瀏覽:143
資治通鑒柏楊版pdf 瀏覽:852
跆拳道pdf 瀏覽:205
程序員畢設可以攻哪個方向 瀏覽:427