Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Skip to content
Commit a4f52ad5 authored by Yohei Yukawa's avatar Yohei Yukawa
Browse files

Fix a remaining View leak in InputMethodManager.

Basically there are two ways to clean up IMM#mNextServedView
and IMM#mServedView:

 1. Clean up them when the Window to which IMM#mServedView belongs is
    dismissed.
 2. Clean up them when IMM#mServedView is detached from a Window.

A previous commit [1] has taken care of the case 1, and my previous
commit [2] aimed to take care of the case 2, which however had an edge
case.

Imagine the following code.

  package com.android.b.bug205171;

  import android.app.Activity;
  import android.os.Bundle;
  import android.widget.EditText;
  import android.widget.LinearLayout;

  public class MainActivity extends Activity {
      LinearLayout mLayout;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);

          mLayout = new LinearLayout(this);
          mLayout.setOrientation(LinearLayout.VERTICAL);

          final EditText editText = new EditText(this);
          mLayout.addView(editText);

          setContentView(mLayout);
      }

      @Override
      protected void onDestroy() {
          super.onDestroy();
          mLayout.removeAllViews();  // (*)
          mLayout = null;
      }
  }

In this case, when the focused EditText is manually detached from the
Window in MainActivity#onDestroy() at (*) the Window no longer has
Window focus.  Hence we should have cleaned up them regardless of Window
focus in InputMethodManager#onViewDetachedFromWindow().

We have seen that not a small number of Fragment-based apps fall into
this issue, probably because Activity#onDestroy() can indirectly
trigger ViewGroup#removeView() after the app loses window focus by back
key.

 [1]: Iad09cf5dbb7f6f156fd39ed243431432e00f8945
      4478de3c
 [2]: Iaf3fe2c065b5bf91e49a729ba46262114bb6da88
      b13f015a

Bug: b.android.com/205171
Bug: 5057608
Bug: 26348766
Bug: 27450392
Bug: 27858665
Change-Id: I9d8fe9ec5ea8ab5716bd189021899792d1206364
parent 5c1e6751
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment