0

我正在构建一个 Android 信息亭应用程序,它将为一个小型客户端工作(播放视频)几乎 24/7 运行。但是我发现在某些时候电源可能会关闭,这意味着平板电脑需要在断电时停止运行应用程序(或至少移除屏幕保持活动状态)并在断电时重新设置所有设置电源重新打开,因此它不会完全杀死设备。我以前做过一些 Android 工作,但没有像这样。鉴于我只有一个活动,并且当我收到状态时活动将运行在我的广播接收器中的 onReceive 调用(我已经在我的清单文件中注册)什么是最佳实践/最惯用的方式对我来说将更改的状态传达给我的活动?

我见过的当前方法包括在活动中公开对活动的静态引用,并使用它与活动进行通信(根据应用程序的生命周期将其适当地设置为 self 或 null )。这是最有效的方法吗?

4

2 回答 2

0

最简单的方法是创建Observer/Observable模式,您在其中BroadcastReceiver实现一个Observable,并通知所有相关方有关更改。对电源更改感兴趣的活动(或其他类)可以注册为 an并在发生某些事情时Observer通过它们的函数调用。update()

只是不要忘记取消注册ObserveronPause()这样您的死活动就不会被调用。

于 2013-03-21T23:39:05.507 回答
0

@Hoan Nguyen 是对的。您的活动可以注册电池事件。这是一个例子:

public class Test extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final TextView text = new TextView(this);
        setContentView(text);
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
                boolean charging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;
                text.setText(charging ? "Charging" : "On battery");
            }
        }, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    }
}

@lenik 可能也是正确的,您应该在 onResume()/onPause() 而不是 onCreate() 中注册/取消注册,但以上内容应该可以帮助您入门。

于 2013-05-12T17:42:18.813 回答