2012-01-17 62 views
0

其實我創建了一個單例類。現在我的單身課程擴展了活動,並且我已經在此課程上編寫了onCreate()onStart()方法。但它永遠不會被調用。我使用的代碼如下所示。如果有人知道幫我解決這些問題。創建和啓動方法不叫

代碼

public class cycleManager 
{ 
private static CycleManager m_cycleManagerObj; 

private CycleManager() 
{   
    // Initialise Variable 
    onInitialization(); 

    readData(this); // show error when call from here 
} 

public static synchronized CycleManager getSingletonObject() 
{   
    if (m_cycleManagerObj == null) 
    { 
     m_cycleManagerObj = new CycleManager(); 
    }    
    return m_cycleManagerObj; 
} 

public Object clone() throws CloneNotSupportedException 
{   
    throw new CloneNotSupportedException(); 
} 

public void writeData(Context c) 
{ 
    SharedPreferences preferencesWrite = c.getSharedPreferences("myPreferences", 0); 
    SharedPreferences.Editor editor = preferencesWrite.edit(); 
    // work to be done 
} 
public void readData(Context c) 
{ 
    SharedPreferences preferencesRead = c.getSharedPreferences("myPreferences", 0); 
    // work to be done 
} 
} 

回答

1

事情是Android以自己的方式管理活動:從調用構造函數到調用所有生命週期方法。因此,如果您將您的Activity的構造函數聲明爲私有,那麼Android將無法管理此活動。

爲什麼你需要singleton Activity-class?考慮different launch modes

+0

其實這是我把所有需要進行操作的方法的類。所以無論何時在哪個活動中我需要這個方法..我只需創建該類的一個實例並調用我想要的方法。 – AndroidDev 2012-01-17 07:35:47

+1

您不應該使用Activity類來保存這些方法。如你現在所做的那樣,使用單獨的課程。您應該將Activity類視爲單個屏幕的表示。 – 2012-01-17 08:46:04

+1

澄清,不一定是一個單獨的屏幕,但個別任務所需的用戶界面。否則,a.ch.是現貨。單身人士活動是**糟糕的想法,並正在爲自己的內存泄漏設置自己。在嘗試這樣的事情之前,您應該閱讀Activity Lifecycle和約定。 – 2012-01-17 09:29:48

0

,自己不是公職method.They保護method.You應該重寫現有method.try像下面這樣。

@Override 
    protected void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 
    } 

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

檢查您在AndroidManifest.xml中的活動。

<activity 
    android:configChanges="orientation|keyboardHidden" 
    android:name=".ActivityName"> 
0

這裏的關鍵是,Android應該是管理你的活動生命週期,而不是你。

onCreate和onStart(以及onPause,onDestroy和所有其他android活動生命週期函數)都由Android主線程上的循環調用者調用。

你是怎麼開始這項活動的?它是否在您的艙單中被宣佈爲您的主要活動和發射器?您是否調用了startActivity並傳​​遞了類名?

事實上,你正在創建一個你的活動的單例實例,並且它的構造函數是私有的,這向我建議,當你想要的時候,Android將無法啓動這個活動,雖然有一些函數用於傳遞現有的活動被管理可能存在,而我從來沒有見過它。

如果onCreate和onStart從未被調用,這意味着Android不知道它應該運行您的活動。

0

由於您的班級不是Context的子類,因此出現錯誤。將Context屬性添加到getSingletonObject(Context context)方法並將其傳遞給CycleManager(Context context)構造函數。