1

我编写了一个活动 A,当用户按下按钮时,它将执行 MyConfig.doSomething() ,其中 MyConfig 是简单的类,活动 A 传递给它。

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 Boots-Up 时调用它。

我可以编写另一个类来扩展 BroadcastReceiver,然后通过调用启动活动 A startActivity(A.class),然后在 A 中执行一些技巧来mMyConfig.doSomething()实现。它可以工作,但是当 Android 启动时,应用程序将显示在屏幕上。

我想在mMyConfig.doSomething()不让用户知道的情况下隐式发生。我想有两种可能的解决方案,但我不知道该怎么做。

解决方案A:编写一个扩展BroadcastReceiver的类,启动一个读取A的SharedPreferences的服务(而不是活动A)并创建MyConfig对象来做doSomething()。但是,如果活动本身从未启动,我不知道这是否可行,我怎么能这样做(从服务中读取 SharedPreferences)?

方案B:写一个扩展BroadcastReceiver的类,启动ActivityA不显示,调用startActivity(A.class)onReceive放入Activity栈。这可能吗?

4

1 回答 1

0

您可以让您的 BoardcastReceiver 代替对用户可见的 Activity,而Service不是启动一个。它旨在在不打扰用户的情况下在后台执行任务。官方指南是一个不错的起点。

编辑:

要访问应用程序的 SharedPreference,只需在服务中调用此行:

SharedPreferences pref = PreferenceManager.getSharedPreferences();

于 2012-12-07T03:04:36.430 回答