2012-12-07 65 views
1

我已經編寫了一個活動A,當用戶按下按鈕時,它將執行MyConfig.doSomething(),其中MyConfig是活動A傳遞給它的簡單類。需要建議在Android啓動時執行任務

public class A extends PreferenceActivity { 
    private MyConfig mMyConfig; 

    /* pseudo code, when button clicked, call */   
    mMyConfig.doSomething(); 
} 

在mMyConfig中,它訪問某些配置的SharedPreferences。因此,我可以這樣做,將活動傳遞給mMyConfig以調用getSharedPreferences()。

mMyConfig = new MyConfig (this); 

這裏說到了我的請求:

我想要做的東西,MyConfig.doSomething()已經這樣做,但除了當用戶點擊一些按鈕來調用它,我想調用它時的Android靴行動。

我可以編寫另一個類來擴展BroadcastReceiver,然後通過調用startActivity(A.class)啓動活動A,然後在A中做一些技巧來使mMyConfig.doSomething()發生。它可以工作,但Android應用啓動時應用程序將顯示在屏幕上。

我想讓mMyConfig.doSomething()隱式發生而不讓用戶知道它。我想有兩種可能的解決方案,但我不知道該怎麼做。

解答A: 編寫一個擴展BroadcastReceiver的類,啓動一個讀取A的SharedPreferences並創建MyConfig對象的服務(而不是活動A)doSomething()。然而,如果活動本身從未啓動,我就不會這麼做,我怎麼能這樣做(從服務中讀取SharedPreferences)?

解決方案B: 編寫一個擴展BroadcastReceiver的類,啓動活動A而不顯示它,通過在onReceive中調用startActivity(A.class)來將它放到活動棧中。這可能嗎?

回答

0

而不是用戶可見的活動,您可以讓BoardcastReceiver啓動Service代替。它意味着在不影響用戶的情況下在後臺執行任務。 The official guide is a nice place to start with.

編輯:

訪問應用程序的SharedPreference,只需撥打該行服務中:

SharedPreferences pref = PreferenceManager.getSharedPreferences();

+0

我知道我可以在廣播接收器啓動一個服務,但我m想知道這個服務是否可以訪問Activity的SharedPreferences。活動A可以由用戶啓動以設置配置,但除此之外,我想在系統啓動時使用配置做些什麼()。 – minhong

+0

是的,應用程序的所有組件都可以訪問應用程序的共享首選項,並通過getDefaultSharedPreferences()訪問。可能有一種方法可以獲得特定於活動的偏好,但我忘記它是什麼,而且應用程序範圍內的偏好是無論如何要走的路。 –

+0

@minhong是的,服務也可以訪問SharedPreference,因爲它與活動位於同一個包中。 SharedPreference綁定到整個應用程序,而不僅僅是某些活動。請看我編輯的答案,看看你如何訪問它。 –