我已經編寫了一個活動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)
來將它放到活動棧中。這可能嗎?
我知道我可以在廣播接收器啓動一個服務,但我m想知道這個服務是否可以訪問Activity的SharedPreferences。活動A可以由用戶啓動以設置配置,但除此之外,我想在系統啓動時使用配置做些什麼()。 – minhong
是的,應用程序的所有組件都可以訪問應用程序的共享首選項,並通過getDefaultSharedPreferences()訪問。可能有一種方法可以獲得特定於活動的偏好,但我忘記它是什麼,而且應用程序範圍內的偏好是無論如何要走的路。 –
@minhong是的,服務也可以訪問SharedPreference,因爲它與活動位於同一個包中。 SharedPreference綁定到整個應用程序,而不僅僅是某些活動。請看我編輯的答案,看看你如何訪問它。 –