我找到了一些关于onDestroy和finish之间差异的答案。
Finish将从堆栈中删除活动,但不会释放 内存并不会每次都调用onDestroy。 onDestroy会杀死活动并释放内存。
在我的情况下: 有2项活动。 A是主要活动,B是带有一些EditText的活动,用于通过使用Volley将数据发送到服务器。
A - > B - >甲
当我成功发送数据时。它将运行finish()来杀死B. B被摧毁。但我再次呼叫B,所有数据仍然存在(EditText的内容)。这意味着记忆力还不清楚。
有没有人面对这些问题? 有我的代码:
public void update(final Context context, final Map<String,String> data,final Activity activity){//pass B
RequestQueue queue = Volley.newRequestQueue(context);
String url = "http://xxxxxxxx";
StringRequest sr = new StringRequest(Request.Method.POST,url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
activity.finish();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//mPostCommentResponse.requestEndedWithError(error);
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = data;
//data.
//params.put("user",data.get(''));
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> params = new HashMap<String, String>();
params.put("Content-Type","application/x-www-form-urlencoded");
return params;
}
};
queue.add(sr);
}
已更新
活动B使用FragmentStatePagerAdapter具有viewpager和3个片段。 当我调用B的finish()时,片段下的数据将无法清除。当我再次开始B活动时,我可以看到旧数据。
答案 0 :(得分:4)
当您调用以下功能时:
S.No start_date end_date
1 2016-04-01 2016-04-08
2 2016-04-28 2016-05-29
3 2016-05-01 2016-05-39
应该注意的是,其所有资源都排队等待垃圾回收,并且在下一个GC周期期间将释放此活动使用的所有内存。
如果你真的想尽快撤销内存,请覆盖你的活动'onDestroy方法:
someActivity.finish(); // This will free the memory, see notes below
注意 Runtime.getRuntime()。gc(); 这要求VM尽最大努力回收所有丢弃的对象 - 引自http://www.tutorialspoint.com/java/lang/runtime_gc.htm。