我正在构建一个Android自助服务终端应用程序,该应用程序将以24/7的速度运行,用于小型客户端工作,播放视频。但是我发现在某些时候电源可能会消失,这意味着平板电脑需要停止运行应用程序(或至少移除屏幕保持活动状态),当电源熄灭时重新设置设置全部备份电源重新启动,因此它不会完全杀死设备。我以前做过一些Android工作,但没有这样的。鉴于我只有一个活动,并且当我收到状态时,活动将运行来我的广播接收器中的onReceive呼叫(我已经在我的清单文件中注册)对我来说最好的做法/最惯用的方式是什么将更改后的状态传达给我的活动?
我见过的当前方法涉及在活动中公开提供对活动的静态引用,并使用该参数与活动进行通信(根据应用程序的生命周期将其适当地设置为self或null)。这是最有效的方法吗?
答案 0 :(得分:0)
最简单的方法是创建Observer/Observable
模式,BroadcastReceiver
实现Observable
,并通知所有感兴趣的各方有关更改的信息。对权力变化感兴趣的活动(或其他类)可以注册为Observer
,并在发生事件时通过update()
函数调用。
请不要忘记取消注册Observer
中的onPause()
,这样就不会调用您的死活动。
答案 1 :(得分:0)
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()中注册/取消注册,但上面的内容应该让你开始。