CSipSimple が着信しない!?!?(簡単な解決法&バッテリー改善?)

CSipSimpleをフォアグラウンドにしていても、ときどきCSipSimpleが着信しない時があるというのは、裏で走っているcom.csipsimple:sipStackという待ち受けのプロセスがシステムによってしばらくすると優先順位が下げられ、最終的にkillされてしまうことがあるからなのですが、ここでは確実に着信するようCSipSimpleの優先順位を上げる方法を説明します。

前回のSuperchagerを使う方法は、メモリ関係のチューニングも伴うので少々(かなり?)敷居が高かったわけですが、ちょっと簡単な方法を考えてみました。

結局のところ、bulletproofのスクリプトは、指定の時間ごとにプロセスの優先順位を変えているだけなので、面倒なSuperchagerを使わずともinit.dに無限ループで同じことをするスクリプトを書けばいいだけの話です。

何故無限ループにするかとか言うと、仮に一時的にあるプロセスの優先順位を上げたとしても、そのプロセスが使われていないと、システムがだんだん優先順位を下げてしまうからです。

ということで、com.csipsimpleの優先順位を定期的に書き換えるスクリプトを作ってみました。

このスクリプトでは30秒に一度、優先順位を書き換えます。見て分かるように、Superchagerのbulletproofのスクリプトの必要最小限な部分を抽出して、com.csipsimple用にしただけです。bpapp=”com.csipsimple”の部分を書き換えれば、どんなプロセスでもbulletproofになります。

#!/system/bin/sh
#
# this script was written by qtotter, but the credit goes to zeppelinrox from
# http://forum.xda-developers.com/showthread.php?t=991276
#
bpapp="com.csipsimple";
bpwait=30;
if [ "`pgrep $bpapp`" ]; then
for bp in `pgrep $bpapp`; do
echo -17 > /proc/$bp/oom_adj;
echo -1000 > /proc/$bp/oom_score_adj;
renice -10 $bp;
echo " BulletProofed $bpapp!";
echo -n " $bpapp's oom score is ";
cat /proc/$bp/oom_score;
echo -n " $bpapp's oom priority is ";
if [ -f "/proc/$bp/oom_adj" ]; then cat /proc/$bp/oom_adj;
else cat /proc/$bp/oom_score_adj;
fi;
echo "";
done;
else
echo " Can't find $bpapp running...";
echo "";
fi;
sleep $bpwait;
if [ "`busybox --help | grep nohup`" ] && [ ! "`busybox ps$w | grep "{.*/${0##*/}"`" ]; then
busybox nohup $0 > /dev/null &
elif [ "`busybox --help | grep start-stop-daemon`" ] && [ ! "`busybox ps$w | grep "{.*/${0##*/}"`" ]; then
busybox start-stop-daemon -S -b -x $0;
else
$0 > /dev/null &
fi;
exit 0;

root化されていて、init.dをサポートしているROMであれば、適当な名前のファイルを作り(例えば、97csipsimple)、上のコードを書き込み、/system/etc/init.d/にコピーして、アクセス権を755などに設定して、リブートすれば、次回起動時以降、30秒に一度com.csipsimpleに関するプロセスの優先順位を-17(killされない順位)にずっと変更し続けます。

単に優先順位を定期的に書き換えているだけなので、バッテリーの減りが急激に速くなるということもないと思います。(端末のRAM容量が小さな機種ではバッテリーの減りが速くなるかも?)

最後に。com.csipsimple:sipStackの優先順位を時間を追って見ていくと、どんどん下がっていきます。多分誰でもたまに着信しないことが起こると思います。これはCSipSimpleに限らず、Playストアからインストールした他のsipアプリでも起こり得ることで、Androidの仕組みから言って「しょうがないかな…」と思いました。おそらく悪名高いAndroid標準sipを使えばこういう問題は起こらないのでしょうね。

なのでIP電話を「ちゃんとした電話」として使うためにroot化してsipをbulletproofにするか、「IP電話は時々繋がらないものなのね」と割り切って使うか、どちらかだと思います。Android標準sipの代わりに他のsipアプリを使って、IP電話のプロバイダやsipアプリを「たまに繋がらないことがある!!」と非難するのはちょっと筋違いな気がしました。

PS: 余談ですが、このスクリプトを入れて逆に若干バッテリーの持ちがよくなったような気がします(正確には計っていませんが、以前はスリープ時毎時1%台後半だったのが、今は1%切ってる)。おそらく、しばらく使っているとメモリに空きがあるにもかかわらずcom.csipsimple:sipStackの優先順位が落ちていき、システムにkillされてしまい、com.csipsimpleがcom.csipsimple:sipStackを定期的に再度呼び出す、ということを何度も何度も繰り返さなくなったので、その分バッテリーの持ちがよくなったのだと思います。期待していなかった副作用でした。ただ、RAMが少ない端末の場合、com.csipsimple:sipStackがずっと常駐しているので、他の常駐系アプリが起動&終了を繰り返してしまい、バッテリの持ちが悪くなるかもしれません。この辺は、端末のRAM容量、メーカーのメモリ周りの設定、ユーザーが入れているアプリの数と種類などによって、かなりまちまちな結果になると思います。

追伸、
この方法はKitkat以降使えないようです。所定の優先順位で上書きされます。

3 Responses to “CSipSimple が着信しない!?!?(簡単な解決法&バッテリー改善?)”

  1. これをやったら、確かに、電池持つし、着信するし、iphone使えるようになったかも。 http://… | kilin > Tweets Says:

    […] これをやったら、確かに、電池持つし、着信するし、iphone使えるようになったかも。 qtotter.wordpress.com/2013/09/18/csi… […]

  2. Android用SIPアプリCSipSimpleが着信に失敗する問題 | あくまで暫定措置としてのブログ Says:

    […] この現象の説明として、ガセとしか思えないような情報もWeb上では散見されるが、「CSipSimple が着信しない!?!?(初心者には向いていない解決法)」、「CSipSimple が着信しない!?!?(簡単な解決法&バッテリー改善?)」に説明されていることが当たっているのだろう。自分が所有する端末は全てルート化してある(できる機種を選んでる)のでこれら記事で提示されている解決策が実行可能。自分の場合、既にSysTune for Root Usersというアプリを購入していたので、スクリプトではなく、これを利用してGUIを通じて同様の設定してみた。これによる改善は期待できるだろう。できれば、ルート化していない端末にも使える方法があるといいのだが、これについてはおいおい考えていきたい。 […]

  3. Cusupie Says:

    活用させてもらっています。
    ちょっとはまったのが、Andoidで上記のスクリプトを入力するのが面倒でWindows上で切り貼りしてAndroidに持っていったため、改行コードがCR+LFとなってしまい、Android上の「SManager」で動作させても6行目の「bpapp=”com.csipsimple”;」が見つかりませんと出てうまく動作しませんでした。
    Windows上のテキストエディターで改行コードをLFのみで保存してAndroidへ持っていくとすんなり動作しました。
    ちゃんと「Auto Memory Mnager」でOOM Priorityを見ても「-17」になっていますね。
    ちなみに端末はXperiaSXをルート化したものでSimはIIJmioです。
    ありがとうございました。

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: