Java 如何在android中每5秒在后台无限时间运行特定方法?
我正在开发一个疫苗查看器应用程序,我想实现一个运行到疫苗可用为止的功能 这是我的疫苗检查方法Java 如何在android中每5秒在后台无限时间运行特定方法?,java,android,android-studio,Java,Android,Android Studio,我正在开发一个疫苗查看器应用程序,我想实现一个运行到疫苗可用为止的功能 这是我的疫苗检查方法 boolean checkVaccine(String pinCode,String data){ isVaccineAvailable = false; String url = "https://cdn-api.co-vin.in/api/v2/appointment/sessions/public/calendarByPin?pincode="+pinCode+
boolean checkVaccine(String pinCode,String data){
isVaccineAvailable = false;
String url = "https://cdn-api.co-vin.in/api/v2/appointment/sessions/public/calendarByPin?pincode="+pinCode+"&date="+data;
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray dataArray = response.getJSONArray("centers");
if(dataArray.length()==0){
Toast.makeText(MainActivity.this,"No Center Available",Toast.LENGTH_SHORT).show();
}
for(int i=0;i<dataArray.length();i++){
JSONObject centers = dataArray.getJSONObject(i);
String centerName = centers.getString("name");
String centerAddress = centers.getString("address");
String vaccinationStartTime = centers.getString("from");
String vaccinationEndTime = centers.getString("to");
String vaccinePrice = centers.getString("fee_type");
JSONObject sessions = centers.getJSONArray("sessions").getJSONObject(0);
int minimumAge = sessions.getInt("min_age_limit");
String vaccineName = sessions.getString("vaccine");
int totalVaccineAvailable = sessions.getInt("available_capacity");
if(totalVaccineAvailable>0){
isVaccineAvailable = true;
}
vaccinationData addData = new vaccinationData(centerName,
centerAddress,vaccinationStartTime,vaccinationEndTime,
vaccinePrice,vaccineName,totalVaccineAvailable,minimumAge);
dataList.add(addData);
}
vaccinationDataAdapter adapter = new vaccinationDataAdapter(MainActivity.this,dataList);
recyclerView.setAdapter(adapter);
}catch (JSONException e){
Toast.makeText(MainActivity.this,"Unable To Get Data From Server.",Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,"Unable To Get Data From Server.\nMake Sure Your Internet Connection ON.",Toast.LENGTH_SHORT).show();
}
});
queue.add(request);
return isVaccineAvailable;
}
每隔5秒,我必须在后台永远重复检查疫苗的方法。您需要的是后台服务。您可以在后台服务中长时间运行该操作。由于您希望无限期地运行这些,这将不起作用,因为android在android O之前设置了一些限制,因此您的服务将在某个时候停止 这是一些关于如何创建它及其局限性的文章 这不是在后台无限期运行任何任务的好方法,事实上,这是一种不好的做法。这将耗尽电池和系统资源 如果您想构建一个在疫苗可用于某个特定Pincode时通知您的东西,那么您应该构建一个在服务器上运行并在可用时向您发送通知的东西,而不是您的设备每5秒钟检查一次 您可以构建一个电报机器人,并将应用程序部署到Heroku或AWS等服务上
我想让你知道,cowin API是地理限制的,所以如果你在服务器端构建了一些东西,那么它根本就不起作用。如果你选择任何不在印度的实例,你需要一个印度服务器实例来实现这一点。我通过观察得到了答案的解决方案
我必须使用线程或可运行接口在后台执行此操作。你说的“后台”是什么意思?作为守护进程线程?@Stultuske在后台意义上如果用户单击“通知我”按钮,则疫苗检查器方法将运行,直到它不返回true并显示通知,即使应用程序已最小化。尚未编写任何android应用程序,因此我可能会退出,但我不明白为什么最小化会影响应用程序的功能。我想在设备中运行应用程序时多次在本地运行检查疫苗方法。有任何方法可以多次运行方法。
while(!checkVaccine(pinCode,date)){
Handler waitForFiveSeconds = new Handler();
waitForFiveSeconds.postDelayed(new Runnable() {
@Override
public void run() {
}
},5000);
dataList.clear();
}
Toast.makeText(MainActivity.this,"Vaccine Is AVailable.",Toast.LENGTH_SHORT).show();
notifyToTheUser();