Quantcast
Channel: 犬を一匹飼っている
Viewing all articles
Browse latest Browse all 248

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

$
0
0

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容量、メーカーのメモリ周りの設定、ユーザーが入れているアプリの数と種類などによって、かなりまちまちな結果になると思います。


Filed under: Android, app

Viewing all articles
Browse latest Browse all 248

Trending Articles