2013-07-19 18 views
8

Playストアでアプリを更新するときの端末のワークフローは何ですか?ユーザーが同時にアプリを使用している場合はどうなりますか?アプリが更新されたときにAndroid搭載端末ではどうなりますか?

文字列IDが見つからない場合はクラッシュがあり、APKを見ると文字列リソースは両方のバージョンで利用できますが、クラッシュ時に報告された16進数のIDはOLD APKにあります新しいものではない。これはおかしい。

これは、アプリが実行されている間にPlayストアがアプリのファイルやリソースを更新した可能性があると考えています。また、文字列リソースを参照してメモリから古いIDを使用し、新しく更新されたファイルでそれを見つけていないと、ResourceNotFound例外が発生します。

これはどのように可能ですか?それも可能ですか?私は、APKを見て、クラッシュしていたIDが古いリソースIDと一致していて、ちょうど押した新しいIDではないことを除いて、私は思っていませんでした。

+3

私が知る限り、アプリを更新する前にアプリのプロセスを停止する必要があります。 @ShobhitPuri - インスタントパブリッシングとアップデートは、Google Playクライアントがデバイス上の実行中のアプリケーションで行うことには実際には対応していません。 –

+0

@TedHoppこれを確認します。私は更新中にアプリを使っていて、彼らはいつも自分を閉じています。 –

+0

私も同様の問題がありました。更新時にアプリケーションはonDestroy/onCreate/onResumeを通過しますが、グローバルな静的変数は再ロードされませんでした。したがって、静的int resId = R.id.somethingのようなグローバルな静的変数を宣言した場合は、再度onCreate(resId = R.id.something;)に入れてください。 – stefple

答えて

1

私はこれを調べて見つけたものから、更新のためにファイルにアクセスできるように、アプリケーションにはが終了する必要があるようです。いったん閉鎖されると、Google Playは変更されたapkの部分のみを更新して時間とコストを節約します。

フラッシュのROMからアプリオプションをロールバックする方法を教えてくれるいくつかのフォーラム投稿があります(ルートされたデバイスで常に発生します)。更新を受信した後、ユーザーがロールバックを試みた可能性があります。どちらか、またはクラッシュにあったIDは、更新されていないapkの一部で参照されています。

出典: Notification of Update

What Happens When You Update an App

Google Play Saves Cost & Time

+0

私は、更新を行うためにアプリケーションを終了する必要があることに同意するだろうが、新しいアプリのバージョンからのクラッシュログの古いR.javaにしかないString IDをどのように取得するのだろうか? –

+0

それは問題だと思います。これは、R.javaがIDを格納する方法と関係するものでなければなりません。あるいは、*更新されていないファイル*がString IDを参照し、新しいR.javaに含まれなくなったため、エラーになることがあります。これはあなたが再現できたものか、ユーザーセット内で大規模に発生したものですか?または、これは1人のユーザーのための1回限りのクラッシュですか? – Phoenix

+0

これは数百万回の規模で、約30万回のアプリのアップグレードで起こったので、一度だけのことではありません。タブレットと携帯電話の両方で、2.3.xのアンドロイド版と4.1.xのバージョンで報告されています。 –

0

ユーザーは、Linuxのファイルシステムは、上記の動作を可能とするアプリを更新するのと同じ時刻にアプリを使用している場合。ディスク上の実行可能ファイルが更新されていても、ファイルを開いたままのプロセス(アプリケーションの実行中にアプリケーションを実行可能と考える)によって、実行可能イメージがメモリに保持されます。これが許すのは、新しいapkを置いて、メモリに残っている古いexeイメージで解凍することです。

リソースファイルが遅延ロードされる傾向があるため、メモリ内の古いイメージをナビゲートすると、リソースが検索され、新しくアンパックされたアプリケーションからリソースがロードされる可能性があります。リソースが古いアプリと互換性がなくクラッシュする可能性があります。

+0

Androidが実行中で、更新プログラムをインストールする必要がある場合は、Androidを終了することを除いて。 – AfzalivE

+0

ここの大きな「煙銃」は、旧バージョンのR.javaにのみ存在するString IDを含む新しいアプリケーションバージョンのクラッシュレポートと思われます。 –

0

私はこのような問題が発生したことを覚えています。私の状況では、ユーザーIDを使用してリソースID(および列挙された値)を格納していたという問題がありました。アプリケーションが更新されると(新しい列挙値、新しいリソース)、古い値がユーザーの設定から読み込まれ、コードに渡され、クラッシュが発生しました。

おそらくこれは問題ではありませんが、存在しなくなったリソースのIDを格納/ロードしていないことを確認する価値があります。

関連する問題