当活动处于onPause生命周期时,请尝试运行asinktask



当我的数据库发生更改时,我需要发出通知,并且我不能在这个项目中使用firebase,所以我尝试在这里制定一个解决方案:!!!

@Override
public void onPause() {
super.onPause();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
new push_notification().execute();
}
}, 5000);
}

private class push_notification extends AsyncTask < Void, Void, Void > {
HashMap < String,
String > contact;
ContactsContract.Contacts contacts;
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("please wait ...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void...arg0) {
///////////////////////////////
contactList = new ArrayList < > ();
HttpHandler sh = new HttpHandler();
String link;
String data = "";
BufferedReader bufferedReader;
String result;
try {
data = "?id=" + URLEncoder.encode("199", "UTF-8");
} catch (Exception e) {}
url4 = "http://www.xxxxxxxxxxxxxxxxx.php" + data;
jsonStr = sh.makeServiceCall(url4);
if (jsonStr != null) {
try {
JSONArray contacts = new JSONArray(jsonStr);
// looping through All Contacts
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
pre_post_id = c.getString("id");
pre_phone = c.getString("phone");
pre_username = c.getString("username");
pre_pic = c.getString("pic");
pre_date = c.getString("date");
pre_follow_askers = c.getString("follow_askers");
contact = new HashMap < > ();
// adding each child node to HashMap key => value
contact.put("id", pre_post_id);
contact.put("phone", pre_phone);
contact.put("username", pre_username);
contact.put("pic", pre_pic);
contact.put("date", pre_date);
contact.put("follow_askers", pre_follow_askers);
// adding contact to contact list
contactList.add(contact);
}
} catch (final JSONException e) {
//Log.e(TAG, "Json parsing error: " + e.getMessage());                    
}
} else {}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
toast(pre_phone);
}
}

有人知道我该怎么做吗?

您需要重新思考您的设计,以尊重活动生命周期。根据定义,您不应该在UI中从暂停的活动中执行任何操作。

另外,AsyncTask会给您带来很多麻烦——我建议您完全远离它,并找到一种更好的方法来进行后台处理。我建议提供后台服务。

你还应该认真考虑取消进度对话框和祝酒词。您所拥有的是一个后台任务,它实际上并没有连接到UI的任何部分,而试图将其连接到UI可能会给您带来无尽的问题。

最新更新