mixture-art@Q
技術+アイディア+世俗+なんとなく思ったこと、すべての融合がmixture-art
iPad/iPhoneアプリが落ちる件の『2歩』突っ込んだ解決法

iPad/iPhoneアプリ突然落ちる時がある。

基本的にはメモリ圧迫がその主要原因なわけだが、ここではそのような問題が発生する経緯
さらに一般的な解決法、そしてそれに加えもう1歩、2歩突っ込んだ解決法について提案する。



iOSアプリは普段どのような時に落ちるか?

アプリを立ち上げた直後、メールを書いている途中、
Facebookで写真のリンクをクリックしたとたん、

発生するタイミングは様々だが、

これはiOS app全般に共通の話。

そしてむかーしからある話だ。

理由はハッキリしている。メモリ不足だ。

iOSAndroidでは基本的にメモリは
「必要に応じて解放
という仕組みを取っている。

つまり、だーーーっと使っているとどんどんメモリは圧迫されていって
必要なときに「やべ、足りない」とシステムが思ったら
その時に不要な(っぽい)ものから消して空き領域を確保するわけだ。

20130526-103138.jpg

これが何らかの理由で上手く動かない時に
「アクセスしてはいけない番地」にメモリアクセスしようとして
アプリは強制終了される(落ちる)。

これはアプリのせいではなく、100% iOSの責任だ。
アプリ側からは基本的にメモリのallocationは管理できないからね。



しかしながら解決策が不明確な状態が続いている。
AppleがiOSの内部の仕組みを公開していないからだ。
まぁ今後もそんなことはあり得ないだろう。

したがって使用者の誰かから解決策が提案され、
それを試してみて「おぉ解決、快適になったか?」と思いきや
しばらく立つと同じ問題に際悩まされる。

ということが続いている。

それが現状だ。







とはいえ、

とりあえず、まずはいくつか一般に言われる対策について整理しよう。

<使っていないアプリを消す>

ホームボタンダブルクリックすると出てくる下部のメニュー

20130526-021140.jpg

そこでどれかアプリをドラッグすると下のようになり
ここから使っていないアプリを消すことができる。

20130526-021152.jpg

基本的にはiOSでは使っていないアプリもバックグラウンドで動いていることになっている。
当然メモリ圧迫の元だ。

小まめに消す習慣をつけよう。

<メモリをキレイにする>

メモリというのはなんやかんやとゴミのような無駄が蓄積してしまうものだ。
よく「ファイルを消したからといって完全に消えたわけではない」と言うけど
大抵はリカバー可能な状態で残されていたりログが残っていたり
アプリ本体は消したけどログや設定データは残ってたりする。

そういうものもクリンナップしなければならない。

これは基本的には何かしら『メモリ解放アプリ』を入れることで可能になる。
「メモリ」「解放」
とか検索すれば色々出てくるので何を使うかはお任せする。

私は以下のポストにあるアプリを使っているがまぁボチボチだと思っている。


最近のiPhoneはメモリ残量の管理が必要「Free Memory Lite

http://mixture-art.net/最近のiphoneはメモリ残量の管理が必要「free-memory-lite」/

<どうしようもなかったら再起動する>

上記2点を一発で確実に実現する方法が再起動だ。

「ホームボタン」と「電源ボタン」を同時に長押しすると自動で再起動される。

時間がかかるので滅多にやる気にはならないが、どうしようもない時はやってみよう。





さて、、、

これら一般的なもので解決している人は
そもそもこのポストに辿り着いていないかもしれない。

検索上位にひっかかったもので片付いてめでたしめでたし、だからだ。

ということで、そうはいかなかった不運な方向けに
(うちの妻もそうなんだが)

付け加えて2点、

私が「どうやらこれも関係ありそうだな」と思う点について書いておく。






ひとつは

<フラッシュメモリの残量>

だ。

いわゆる「iPhone/iPadストレージサイズ」と一般的に認識されている領域のことだ。
(16GB, 32GB, 64GB, etc.)

これは

「設定」>「一般」>「使用状況

から見ることができる。

Screen Shot 2013-05-26 at 5.21.14 PM

一般通念からいくと、この項目は先ほどから述べている
アプリが展開されて動いている「動作メモリ領域」とは関係がない。
保存するためのメモリ領域」だからだ。

普通、ハードウェアの時点で「動作用のメモリ」と「保存用のメモリ」は分けてある。

具体的にはそれぞれ別の部品が用意されている。

なぜかというと用途に応じて諸々の差異があるからだ。

動作用メモリは速い、保存用は遅い
動作用は小さくて、保存用は大きい
動作用は拡張が難しく、保存用は容易(外付けメモリなど)

つまり保存用はたまにしかアクセスしないようにするべきで、
短期間で決着するものは動作用で処理する。

20130526-103150.jpg

ざっくり言うとそういう使い分けをするのだが、、、

近年この差異は不明確になっていると言って差し支えない。

外部バスのスピードはアップしているし、CPUの内部メモリの容量も拡大の一途だ。

つまり、保存用を何かしらの用途で動作用のように使っている時があるように思う。

したがって保存用のメモリ領域もこの件には無関係ではないように思える。

現に写真等でストレージが圧迫されていると落ちる頻度が上がる。というのは経験した。

そしてもうひとつは

<母艦との同期の頻度を上げた方が良い>

だ。

たまに
「使用量」+「残量」=「本来のメモリのサイズ」
ならない時がある。

「本来のメモリサイズ」とはスペックの16GB/32GB/64GBという容量のことではない、
なぜなら上記の数字は『全部の容量』であって、そこからiOS自体のファイルサイズその他を差し引く必要がある。
つまり
「本来のメモリサイズ」=「購入時の空き容量
と言っても良いかもしれない。

これはログアップデートパッチ、その他色々な
『システム事情』のシロモノが堆積しているのだと考えられる。

例えばファームのアップデート用のファイルはこれの一例に該当する。
ダウンロードだけ許可して「インストール → 再起動」をしていないと
メモリは大幅に圧迫されているのだ。(経験談)

上記はあくまで一例だが、

ゴミデータ → ストレージ圧迫 → メモリ不足 → アプリ落ちる

の因果の輪に落ちることが容易に予想できる。

これは母艦(パソコン)と同期をすることで解消されることが多い。


さて、参考になっただろうか。

残念ながらこの手の問題は試行錯誤の領域を出ない。
確実な診断法も確実な解答もない。

あなたの試行錯誤とその末の解決法にどこか別のポストで出逢えることに期待するとしよう。



mixture-art@Q トップへ戻る