2018年10月1日月曜日

再びEditTextのメモリリーク

こんにちは。

以前にもEditTextでメモリリークを発見し対応したのですが、その後のライブラリのアップデートで改善されていました。

参考記事:「メモリリーク その4 EditText

しかし、再び、別の原因によるEditTextのメモリリークが発生しました。

メモリリークが発生する場合と発生しない場合があり、しばらく気付かなかったため、どのライブラリから発生するのかは分かりません。

前回と同様、LeakCanaryで発見しました。

端末:Xperia performance
OS:Android 8.0.0

LeakCanaryより↓
In com.bnbnapp.bookshelf:3.13:3064.
* com.bnbnapp.bookshelf.ConditionActivity has leaked:
* GC ROOT static android.view.accessibility.AccessibilityNodeInfo.sPool
* references android.util.Pools$SynchronizedPool.mPool
* references array java.lang.Object[].[32]
* references android.view.accessibility.AccessibilityNodeInfo.mOriginalText
* references android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence.mSpanned
* references android.text.SpannableStringBuilder.mSpans
* references array java.lang.Object[].[0]
* references android.widget.TextView$ChangeWatcher.this$0
* references android.support.v7.widget.AppCompatEditText.mContext
* leaks com.bnbnapp.bookshelf.ConditionActivity instance
 
こちらの対応は以下。

上記対応すると以下のメモリリークを検出しました。

LeakCanaryより↓
In com.bnbnapp.bookshelf:3.13:3064.
* com.bnbnapp.bookshelf.ConditionActivity has leaked:
* GC ROOT static android.view.accessibility.AccessibilityNodeInfo.sPool
* references android.util.Pools$SynchronizedPool.mPool
* references array java.lang.Object[].[5]
* references android.view.accessibility.AccessibilityNodeInfo.mOriginalText
* references android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence.mSpanned
* references android.text.SpannableStringBuilder.mFilters
* references array android.text.InputFilter[].[0]
* references android.widget.Editor$UndoInputFilter.mEditor
* references android.widget.Editor.mProcessTextIntentActionsHandler
* references android.widget.Editor$ProcessTextIntentActionsHandler.mContext
* leaks com.bnbnapp.bookshelf.ConditionActivity instance
 
こちらの対応は以下。

以上で、メモリリークは検出されなくなりました。

2018年6月21日木曜日

DELLの前面にさしたイヤホンから音が出ない

こんばんは。

Androidのアプリ開発はDELLのマシン(Windows10)で行っていますが、Windows Update後、前面のイヤホンジャックにさしたイヤホンから音が出なくなりました。

本気で直そうとはしていなかったのですが、今日、たまたま解決しましたので、記事にしておきます。

タスクバーの「Dell Audio」を右クリックして、「サウンドマネージャー」をクリックします。


(スタートメニューにも「Dell Audio」がありました。)

起動したDell Audioの「詳細」-「ジャック情報」を開きます。


ここまでは、何度も来ました。この画面では何もできないなと思っていたのですが、違いました。

「フロントパネル」の下の黒い●がクリックできるのです!






これをクリックすると、以下の選択画面が表示されます。


私の場合は、「マイク入力」が選択されていましたので、「ヘッドフォン」を選択しなおしました。

これで、無事、イヤホンから音が出ました。


本当に、分かりにくい・・・。


2018年6月9日土曜日

Style.xml内の「Theme」が赤字

おはようございます。

build toolsを3.1.0から上げると、Style.xml内の「Theme」が赤字になってしまいます。

Go To Declaration(Ctrl+B)で宣言部分に飛ぶことはできます。

なのに、たしか、「Cannot resolve symbol」となっているのです。

どうしても解決できず、保留にしていました。

現在、3.1.3まで上がっているにも関わらず、同じ現象になってしまいます。

もう、このままにしとくわけにはいかないため、再調査をして、ようやく解決しました。

方法は簡単です。

1.Android Studioのメニューの「File」-「Close Project」でプロジェクトを閉じます。

2.「Welcome to Android Studio」画面の「Import project」をクリックし、該当プロジェクトをインポートします。

これで、エラーが消えました。


Syncで「Failed to resolve: common」

おはようございます。

キャッシュをクリアしたところ、Syncでエラーとなるようになりました。


エラーの内容は、上の画像のように「Failed to resolve: common」と出るだけで、さっぱり分かりません。

「common」という自作ライブラリを使っていたので、自作ライブラリのせいかと思って調べていたのですが、どうも違います。

そして、ようやく判明しました。

Projectレベルのbuild.gradleは以下のようになっていました。

上記2か所の「jcenter()」と「google()」を逆にするとエラーが消えました。


理由は分かりません。こんなところで時間掛けられないので、理由までは調べません。

2018年5月22日火曜日

「Method '***' is too complex to analyze by data flow algorithm」

こんにちは。

久しぶりの更新です。

一通りコーディングが終わると、Android Studioのメニューの「Analyze」ー「Inspect Code」で、コードをチェックしています。

色々、チェックに引っかかった項目が出てくるのですが、初めて以下の項目が出ました。

「Method '***' is too complex to analyze by data flow algorithm」

'***'の部分は関数名です。

関数が複雑すぎると言われているみたいですが、しばらく原因が分からず放置していましたが、ようやく判明しました。

私の場合は、関数の行数が長すぎたようです。該当関数を二つに分けたところ、解消しました。


そもそも、関数は、コードの見やすさの観点からある程度の長さ以内になるようにしています。

ところが、この関数はエラー処理を後から何度も追加していったところ、長くなってしまいました。(コメント行を含め、238行もありました。)

複雑なアルゴリズムを組んでも、同じ警告が出るのかもしれませんが、行数が長くて警告する場合は、そう警告してもらいたいものです。

以上です。

2018年1月19日金曜日

メモリリーク その4 EditText

こんにちは。

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


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

検出端末は、Xperia performanceです。

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


LeakCanary

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

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

まず、EditTextの代わりに自作のMyEditTextを用意しました。
次に、InputConnectionWrapperも自作し、closeConnectionでmTargetを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件)


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