【发布时间】:2016-12-22 18:42:58
【问题描述】:
我想在用户直接关闭其应用时更新用户状态。
我试过了,但这不起作用:
public class ExitService extends IntentService {
private static String TAG = ExitService.class.getSimpleName();
public ExitService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
String callNo = intent.getStringExtra("callNo");
String status = intent.getStringExtra("status");
updateExitStatus(callNo, status);
}
}
public void updateExitStatus(final String callNo,final String status){
StringRequest strReq1= new StringRequest(Request.Method.POST,
Config.UTL_STATUS, new Response.Listener<String>(){
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_SHORT).show();
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("callNo", callNo);
params.put("status",status);
Log.e(TAG, "Posting params: " + params.toString());
return params;
}
};
// Adding request to request queue
MyApplication.getInstance().addToRequestQueue(strReq1);
}
}
我有 onResume 会将状态更新为“1”(在线取 1,离线取 0)
应用程序也应该在后台运行,因此 onStop 和 onPause 从这个等式中排除。
【问题讨论】:
-
“不工作”是什么意思?onDestroy 方法没有被调用?事实上,你不能确保当用户关闭你的应用时 onDestroy 会被调用。
-
顺便说一句,您似乎在主线程中进行网络请求,这是一个坏主意。只需使用新线程或 AsyncTask 之类的东西来进行网络请求。
-
@SamMao 我正在使用的 api 将状态保存在数据库中,所以如果我直接关闭我的应用程序,那么该状态根本不会改变,这就是我确保 destroy 方法中的代码不起作用的方式跨度>
-
@SamMao onDestroy 方法里面的 volley 怎么样?
-
我不知道volley是否同步执行网络请求,请自己检查并确保网络工作在新线程中完成。并确保在用户关闭您的应用程序时调用您的更新状态代码。我已经测试,如果用户在最近的应用程序中滑动您的应用程序,您的 onDestroy 甚至 onStop 方法可能不会被调用。
标签: android