Android onDestroy并完成

时间:2016-05-04 13:09:27

标签: android ondestroy

我找到了一些关于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活动时,我可以看到旧数据。

1 个答案:

答案 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