CSipSimple が着信しない!?!?(初心者には向いていない解決法)

お店の電話をFUSION IP-Phone SMARTに転送して、CSipSimpleで使っていたわけだけど、先日「何回か電話したけど留守電になってたよ」と言われて、SBMのiPhoneからお店に電話してみるとちゃんとCSipSimpleで着信した。

今度はそのお客さんのドコモのAndroidからお店に電話してもらうと、確かにCSipSimpleは鳴らず、そのまま留守電へ。「キャリアのせい??」と思ったけど、何度かドコモのお客さんのAndroidから電話してもらうと、しばらくしてCSipSimpleで繋がった。

これはおかしい… Nexus4はRAMが2GBもあるのに、deep sleep時じゃなくてもCSipSimpleがOSによってkillされているような気がする。「CSipSimple 着信しない」でググると、同じように着信しない人がいて、機種依存している模様。ポート番号を明示的に設定すると着信するとかいう眉唾な解決法も散見された。そこで、正しい解決策を模索してみることにした。

Auto Memory Managerをインストールして、CSipSimpleの様子を見てみると、CSipSimpleとcom.csipsimple:sipStackというプロセスが走っており、それぞれOOMの優先順位が10に設定されていた。ちなみに電話(モバイルデータ)の優先順位は-12。逆に、自分よりも優先順位が高く設定されているアプリがたくさんある中、よくもCSipSimpleが落ちないものだと関心もした。

つまり、CSipSimpleのOOMの優先順位を上げて、OSによってkillされないようにすれば、CSipSimpleで着信しないということがなくなるだけ話。Auto Memory Managerでも優先順位が変えられるけど、これは一時的なものなので、恒常的に高い優先順位を保つようにしなければならない。ググってみると、英語ではbulletproofing apps(アプリに防弾チョッキを着せる)というらしい。

一番一般的なやり方は、V6 SuperChargerを使ってbulletproofするらしいので、今回試してみることにした。以前はカスタムROMでよくSuperChargerでチューニングしたことを謳っているものも多かったけど、SuperChargerとはメモリ周りを調整するスクリプト。最近は端末のスペックも上がり、RAMもそれなりに積んでいるので、SuperChargerでチューニングしたROMとかは減ってきている。ただ、root化していないと使えないし、スクリプトなのでターミナルから作業をしなければならないし、今スクリプトが何をしているかなどの説明はすべて英語なので、万人に敷居が低い便利ツールではないと思う。

ちなみに、1)端末のターミナルからsuで実行する、2)smanager(アプリ)をインストールしてアプリからrootで実行する、3)PCからadb shellで端末に入ってsuで実行する、の3つの方法があるけど、字が多いのでPCから作業した方がやりやすいと思う。

V6 SuperChargerで面倒なのは、bulletproofしたいだけなのに、一番初めにすべてのメモリ周りの設定をしなければいけないということ。これを一度行うと/sdcardに設定が書き込まれ、次回から好きな設定だけ変更できるようになる。ただし、意味も考えずにこの初めの設定を行うと悲惨な結果が起こり得るので、必ず始める前にリカバリーなどでバックアップを取っておくのは必須。

一通り設定を終え、CSipSimpleとcom.csipsimple:sipStackをbulletproofするように設定(bulletproofを可能にするスクリプトがインストールされ、指定の間隔で指定したプロセスの優先順位が-17=絶対killされないに設定される)して、(cacheなどはすべてワイプし)リブートすると、見事CSipSimpleとcom.csipsimple:sipStackの優先順位が-17に設定された。これで、着信しないなどということはなくなるはず。(多分com.csipsimple:sipStackだけbulletproofにすればいいと思うんだけど…)

すべての作業を終えて思ったのは、アプリの開発者は大変だなぁ…ということ。OOMの優先順位を上げれば、RAMの少ない端末では他のアプリの動作が遅くなり、「このアプリを入れたらスマホが遅くなった」とか「このアプリを入れたらバッテリの持ちが悪くなった」など酷評され、優先順位を下げれば、「動くときと動かない時がある」「動作が遅い」とか文句を言われるわけで、いろいろなスペックの端末を使っている人向けにアプリを公表する場合は、この辺のバランスが肝になるんだろうなぁ…と思った。

余談だけど、このスクリプトは対話型で、結構説明やコメントがユーモア交じりで書かれており、作者はお茶目な方みたい(笑)

最後に、どんなアプリでもbulletproofすればいいかと言えば、それは間違い。たくさんのプロセスをbulletproofしてしまうと、RAMの空きが極端に少なくなって、端末の動作がおかしくなると思う。bulletproofするのはせいぜい1つか2つくらいの(電話の着信と同じくらいかそれよりも大事な)プロセスにするのが吉。やたらに使うものではない。

One Response to “CSipSimple が着信しない!?!?(初心者には向いていない解決法)”

  1. 結局CSipSimpleはだめ? | 犬を一匹飼っている Says:

    […] 以前CSipSimpleが着信しない場合の対処法を書きましたが、この方法はKitKat以降使えなくなってしまいました。KitKat以降では、スクリプトでOOMの優先順位を変えても、所定の優先順位に戻ってしまうからです。 […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: