android - 如何在android中加载没有webview的url?
问题描述
我想在我的应用程序中每 30 秒(作为服务)在后台加载一个 url。我必须在我的服务类中加载 url,因为它没有布局,所以 webview 不适合这个。即使应用程序关闭,我应该使用什么在后台加载 url?
MyService.java 类
public class MyService extends Service {
Activity activity ;
Handler handler = new Handler();
Runnable runnable;
int delay = 7*1000;
public MyService(Activity activity){
this.activity = activity ;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
handler.postDelayed( runnable = new Runnable() {
public void run() {
loadURL();
handler.postDelayed(runnable, delay);
}
}, delay);
return START_STICKY ;
}
@Override
public void onDestroy() {
}
public void loadURL(){
try{
String id = activity.getIntent().getStringExtra("ID");
URL url = new URL("http://localhost/att.php?id=" + id + "&status=&submit=Insert");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
} catch (Exception e){
Toast.makeText(this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
}
解决方案
您可以使用新的 WorkManager。
基本上,您创建一个从以下之一扩展的 Worker 类:
Worker CoroutineWorker RxWorker ListenableWorker
然后你像这样声明它:
val mWorker = PeriodicWorkRequestBuilder<Worker>(15, TimeUnit.MINUTES)
.addTag(WORK_TAG)
.setConstraints(Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build())
.build()
然后将独特的工作排入队列,这样工作经理就不会开始更多相同的任务:
WorkManager.getInstance(context)
.enqueueUniquePeriodicWork(WORK_TAG, ExistingPeriodicWorkPolicy.KEEP, locationWorker)
当您将 Worker 类扩展为例如 ListenableWorker 时,使用您的代码覆盖 startWork() 函数并在主体中运行:
handler.postDelayed( runnable = new Runnable() {
public void run() {
loadURL();
handler.postDelayed(runnable, delay);
}
}, delay);
推荐阅读
- c# - 将项目添加到数据网格的集合中
- weblogic - Web 逻辑服务器 Breach Help!如果访问了任何数据,如何查找哪些数据的迹象?
- go - 在将其导入 BigQuery 之前,CSV 中的日期格式
- c++ - 使用 XPath 在 QDomDocument 中搜索节点
- linkedin - API v2 资产调用返回“Enforced Tenant ACL 结果:false”是什么?
- react-native - 如何在移动应用程序中的 webrtc 通信音频流上对文本执行连续语音
- python - 如何在 python pandas 的整数列上使用 .map
- powershell - PowerShell:向自定义对象添加“行”
- node.js - WebSocket 在 15 - 20 分钟的数据流后停止接收数据 - NodeJS
- javascript - 向单元格添加点击功能(生命游戏)