Android onDestroy 并完成
Android onDestroy and finish
我找到了一些关于 onDestroy 和 finish 之间区别的答案。
Finish will remove the activity from the stack, but will not free the
memory and will not call onDestroy in every time.
onDestroy will kill the activity and free the memory.
我的情况:
有2个活动。 A 是主要的 activity,B 是 activity,带有一些 EditText,用于使用 Volley 将数据发送到服务器。
A -> B -> A
当我发送数据时 successfully.It 将 运行 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);
}
已更新
Activity B 使用 FragmentStatePagerAdapter 有 viewpager 和 3 个片段。
当我调用 B 的 finish() 时,片段下的那些数据将不会清除。当我再次启动 B activity 时,我可以看到旧数据。
当您调用以下函数时:
someActivity.finish(); // This will free the memory, see notes below
需要注意的是,它的所有资源都排队等待垃圾收集,并且这个activity使用的所有内存将在[=21=期间被释放]下一个GC周期.
如果你真的想尽快撤销内存,重写你的activity的onDestroy方法:
@Override
public void onDestroy() {
super.onDestroy();
Runtime.getRuntime().gc(); // notify gc to be called asap
}
注意 Runtime.getRuntime().gc(); 这要求 VM 尽最大努力回收所有丢弃的对象——引自 http://www.tutorialspoint.com/java/lang/runtime_gc.htm.
我找到了一些关于 onDestroy 和 finish 之间区别的答案。
Finish will remove the activity from the stack, but will not free the memory and will not call onDestroy in every time. onDestroy will kill the activity and free the memory.
我的情况: 有2个活动。 A 是主要的 activity,B 是 activity,带有一些 EditText,用于使用 Volley 将数据发送到服务器。
A -> B -> A
当我发送数据时 successfully.It 将 运行 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);
}
已更新
Activity B 使用 FragmentStatePagerAdapter 有 viewpager 和 3 个片段。 当我调用 B 的 finish() 时,片段下的那些数据将不会清除。当我再次启动 B activity 时,我可以看到旧数据。
当您调用以下函数时:
someActivity.finish(); // This will free the memory, see notes below
需要注意的是,它的所有资源都排队等待垃圾收集,并且这个activity使用的所有内存将在[=21=期间被释放]下一个GC周期.
如果你真的想尽快撤销内存,重写你的activity的onDestroy方法:
@Override
public void onDestroy() {
super.onDestroy();
Runtime.getRuntime().gc(); // notify gc to be called asap
}
注意 Runtime.getRuntime().gc(); 这要求 VM 尽最大努力回收所有丢弃的对象——引自 http://www.tutorialspoint.com/java/lang/runtime_gc.htm.