我的设想如下:
我在一个聊天应用程序上工作,我想实现某种类型的同步服务,当设备恢复网络连接时会自动启动。任何时候设备再次连接网络,未发送的消息都会自动发送。与应用程序状态(前台,后台或杀死)无关。
尝试的选项:
1.广播接收器与android.net.conn.CONNECTIVITY_CHANGE
此方案仅在应用程序处于活动状态(前台或后台)时有效,但在应用程序被杀死时停止工作。
2.前台服务
一个通知将显示所有的时间,这是不理想的。而且我想避免耗尽用户的电池。
3.安卓X.工作.工人
PeriodicWorkRequest networkCheckingPeriodicWork = PeriodicWorkRequest.Builder.
From<ConnectivityChangeWroker>(repeatInterval:30, repeatIntervalTimeUnit: Java.Util.Concurrent.TimeUnit.Minutes, flexInterval:25, flexIntervalTimeUnit:Java.Util.Concurrent.TimeUnit.Minutes)
.SetConstraints(new Constraints.Builder().SetRequiredNetworkType(AndroidX.Work.NetworkType.Connected)
.SetRequiredNetworkType(AndroidX.Work.NetworkType.Unmetered).Build()).Build();
WorkManager.Instance.EnqueueUniquePeriodicWork("", ExistingPeriodicWorkPolicy.Replace, networkCheckingPeriodicWork);
public class ConnectivityChangeWroker : AndroidX.Work.Worker
{
public ConnectivityChangeWroker(Context context, WorkerParameters workerParameters) : base(context, workerParameters)
{
}
public override Result DoWork()
{
try
{
//Start synch service
return Result.InvokeSuccess();
}
catch (Exception)
{
return Result.InvokeFailure();
}
}
}
但是在这个例子中,我没有达到预期的行为。为了我的理解,我只是设置了一个周期性的工作来检查网络连接,如果有,就运行**DoWork()**方法。
有什么办法可以实现我的梦想吗?
1条答案
按热度按时间6ljaweal1#
我想androidx.Work.Worker是最好的选择。
在
DoWork
中,您应该更新数据库并发送请求。除辅助进程支持long-running workers外
示例下载工作进程: