2018年1月19日金曜日

メモリリーク その4 EditText

こんにちは。

現在までに発見したメモリリークの最終記事です。


compileSdkVersionを26に上げたところ、LeakCanaryでメモリリークを検出しました。

検出端末は、Xperia performanceです。

そのときのLeakCanaryのスクリーンショットが以下です。


LeakCanary

InputConnectionWrapperのmTargetが解放されないようです。

よって、上記が解放されるように対応しました。

まず、EditTextの代わりに自作のMyEditTextを用意しました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.bnbnapp.checkleakedittext;
 
import android.content.Context;
import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
 
public class MyEditText extends android.support.v7.widget.AppCompatEditText {
 
    public MyEditText(Context context) {
        super(context);
    }
 
    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
 
    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        InputConnection ic = super.onCreateInputConnection(outAttrs);
        if (ic != null) {
            // メモリリーク発生のため、MyInputConnectionWrapperを使用
            return new MyInputConnectionWrapper(ic, true);
        }
        return null;
    }
}
次に、InputConnectionWrapperも自作し、closeConnectionでmTargetをnullにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.bnbnapp.checkleakedittext;
 
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputConnectionWrapper;
 
class MyInputConnectionWrapper extends InputConnectionWrapper {
 
    MyInputConnectionWrapper(InputConnection target, boolean mutable) {
        super(target, mutable);
    }
 
    @Override
    public void closeConnection() {
        super.closeConnection();
 
        // メモリリーク発生のため、クローズした後にnullを設定
        setTarget(null);
    }
}
以上により、メモリリークは検出されなくなりました。


2018年1月17日水曜日

何度目かの禁煙

おはようございます。

久しぶりの更新です。今日はまだ5日目ですが、禁煙についてです。

大人になってから、ずっとタバコを吸ってきました。

しかし、今、以下の理由から禁煙を決意しました。



禁煙する理由①:えずく

最近、喫煙が体調不良をもたらすようになっているような気がしてきました。

毎日、何回もえずくのです。実際に吐いてしまう事もありました。

他の疾患で病院にかかるときに、えずく事も相談するのですが、特に取り上げてくれません。

逆流性食道炎で、ストレスからきているのかと勝手に思っていました。

しかし、現在、ストレスから解放されているにもかかわらず、えずきは、変わりません。

引き続きネットで検索して調べていたのですが、タバコが原因として考えられるかもしれないと知りました。

禁煙する理由②:舌炎

ここ2、3年、よく舌炎になります。特に偏った食生活をしているわけではありません。

舌炎は、口内炎よりつらいです。本当に食べられなくなります。


これも、タバコも原因の一つと考えられるという情報をネットで得ました。

また、舌炎があるときは、タバコすら痛いです。

禁煙する理由③:金銭問題

タバコは2日で1箱くらいのペースで吸っていました。

1箱400円ですから、1ヶ月で6,000円。

1年で72,000円。

5年で360,000円。

10年で720,000円。

20年で1,440,000円

30年で2,160,000円

物凄く勿体ないですね。

また、タバコは、どんどん値上がりするでしょうから、負担額はもっと増えます。

禁煙する理由④:喫煙場所

都心に出ると喫煙場所がありません。

よく行く有楽町なんかは、喫煙所がある場所をおさえています。

しかし、近年、喫煙所がどんどんなくなってきています。

試写会とかで有楽町以外の都心にも行ったりするのですが、喫煙所がなかなか見つけられません。

禁煙グッズ

タバコを吸いたくなったときに、ガムや飴でごまかすのは虫歯や舌炎が怖いので、ニコチン、タールを含まない電子タバコを試しています。

VP slimという電子タバコです。

タバコを吸いたいという衝動に襲われたら、この電子タバコを吸っていますが、結構、吸いたい気持ちをごまかせられています。

使い捨てで、2、000円くらいで500回吸えるそうです。

味は6種類あり、今回はロイヤルピュアベリーを買いました。

使い捨てじゃない電子タバコよりも安いので、試しやすいですね。

ビックカメラのポイントが少し残っていたので、ビックカメラで買いましたが、Amazonでも売っています。



また、楽天でも売っています。

価格:2,030円
(2018/1/17 10:21時点)
感想(0件)


今度こそ、禁煙できるといいなと思っています。