我有一个Android服务,即使在最后一个Activity从堆栈中弹出,或者用户已选择执行其他操作,我仍希望继续运行.
本质上,服务正在侦听远程服务器上的更改,当且仅当应用程序中的活动未运行(或可见)时,我才想生成通知.换句话说,我不希望在用户直接与应用程序交互时发生通知.
在用户直接与应用程序交互的情况下,服务将通知活动并基于更改更新适当的UI元素.我计划通过观察者模式实现这一点.
如果没有应用程序活动绑定到它,服务如何知道?
谢谢,J
我正在编写一个Java应用程序,它将加载第三方"驱动程序".我打算开发一个接口,它将定义"驱动程序"必须实现的必需方法,以便在应用程序中工作.
目的是将"驱动程序"包含在jar文件中.然后第三方"驱动程序"开发人员将被要求实现该接口.
当我试图解决这个问题时,我将"驱动程序"代码移动到jar中,发现我遇到了麻烦,因为我在主应用程序和jar文件中都定义了接口.
是否有推荐的方法来实施这种方法,还是我走错了方向?
Ĵ
我有一个使用自定义Connection类(扩展线程)到硬件控制器的服务.当用户更喜欢时,我希望永久保持这种联系.当Android设备失去互联网连接,在Wi-Fi之间切换等时,我已经有了处理代码.
为了保持连接,控制器要求您在每5分钟内与其通话.我目前在Connection类中启动一个在while()中运行的线程,并检查系统时间和上次通信的时间,当> 4分钟时它会请求状态.由于某种原因,在不同时间通信不会及时发生.即,在5分钟后发生.据我所知,服务不会死,但控制器的"Ping"迟到了.当我将手机插入充电器(或调试器)时,不会发生这种情况.此外,当我将服务移动到前台时,行为是相同的.
手机进入睡眠状态时手机是否会减速?
有没有更好的办法?
我认为它是AlarmManger,但是我无法在服务中使用内部类.我尝试使用API演示作为起点,但我似乎无法弄清楚如何注册广播接收器.我试图以编程方式注册接收器,而不更改清单.
public class DeviceConnectionService extends Service {
@Override
public void onCreate() {
Intent intent = new Intent(this, PingConnection.class);
intent.setAction("KEEP_CONNECTION_ALIVE");
PendingIntent sender = PendingIntent.getBroadcast(this,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// We want the alarm to go off 30 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
firstTime += 15*1000;
// Schedule the alarm!
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
firstTime, 15*1000, sender);
// register to listen to the Alarm Manager
if (mPingConnectionReceiver == null) {
mPingConnectionReceiver = new PingConnection(); …Run Code Online (Sandbox Code Playgroud)