2016-02-11 11 views
11

私のアプリケーションの1つは、Kitkat Samsungデバイスで重大なアクティビティレクレーションの問題があります。写真を撮るときに問題がより頻繁に現れ、RAMの半分の汚れているJellybean Samsungには見られません。ログにはメモリが不足していますが、OutOfMemoryExceptionはスローされません。 Kitkatにもっと積極的な活動閉鎖政策があると思います(そうしないと、デフォルトのカメラアプリが漏れている)。カメラを別のプロセスで開く

私のアプリのメモリが高いときにOSが自分のアクティビティを終了するのか、それともすべてのアプリケーションで使用されるメモリの合計が高いときにOSを閉じてしまうのだろうと思っていました。 OSにプロセスごとのしきい値がある場合、別のプロセスでカメラを開くと役立つかもしれません。

マニフェストのprocess属性を使用して、独自のプロセスでサービスを開始することができます。 Activitiesに相当する属性がないと仮定して、独自のプロセスでプロキシサービスを開始し、このサービスからアクティビティを開始した場合、このプロセスでアクティビティも実行されますか?

+0

@オニクこれらの段落はバックグラウンドです。おそらくそこに誰かがOSのメモリ管理を深く知っていて、何が起こっているのか理解する助けになるかもしれない。私はLollipopのメモリリークの問題とwebviewのリークについて知っていますが、AFAIKはKitkatsに更新されたwebviewを適用しません。 –

+0

アクティビティも独自のプロセスで起動できますhttp://developer.android.com/guide/topics/manifest/activity-element.html#proc – nandeesh

+1

Intentを使用してカメラを使用する場合は、すでに別のプロセスでカメラを使用しています。起動されたカメラアプリはユーザーによって選択される可能性があり、プロセスがメモリから外れて膨大になる可能性があります。あなたのアプリはAndroidシステムの良い市民になるように準備され、終了時に状態を維持し、意図の結果が返されたときに復元する必要があります。しかし、この破壊があなたのユースケースでは受け入れられない場合、あなたのアプリの中に「カスタムカメラ」を実装する必要があります。このようなカメラを操作することは、本質的にメモリを消費する作業ではありません。 –

答えて

2

完全に「別のプロセスでカメラを開くと、」これはデフォルトですでに何が起こるかであるという理由だけで、あなたを助けていないことは明らかであるからApplication fundamentals文書で合意されている説明の行動:

システムがコンポーネントを起動すると、そのアプリケーションのプロセスが起動されていない場合はそのプロセスが開始され、コンポーネントに必要なクラスがインスタンス化されます。たとえば、写真をキャプチャするカメラアプリでアクティビティを開始すると、そのアクティビティはアプリのプロセスではなくカメラアプリに属する​​プロセスで実行されます。それはProcesses and Application Life Cycleごとにメモリに低い場合、システムによって殺される候補の一つである可能

カメラアプリがフォアグラウンドになったときだから、あなたのアプリがバックグラウンドに行き、。あなたは通常のOSの動作を目撃しています。 RAMの総量は重要なポイントではありません。フォアグラウンド問題でプロセスに使用できる量の空きメモリ。

あなたの質問に対する答えはNoです。すべてのActivityは、開始要求がどのプロセスから来ていても、マニフェストファイルを通じて最初に宣言されたアプリケーション(プロセス)内で起動して実行されます。

コマンド

adb shell ps | grep 'app_name' 

あなたとカメラアプリが実行されて処理することを教えてくれます。 Application fundamentalsから...

つのアプリはいえ、同じプロセスで実行することができますが、このために必要な前提条件は、アプリケーションの同じ署名である:

同じを共有するために、2つのアプリを手配することが可能ですLinuxユーザーID ...同じユーザーIDを持つアプリケーションは、同じLinuxプロセスで実行し、同じVMを共有することもできます(アプリケーションは同じ証明書でも署名する必要があります)。

+0

[この開発者ガイド](http://developer.android.com/guide/components/processes-and-threads.html#Processes)によれば、アクティビティにも 'android:process 'を使うことができます。 –

+0

修正。あなたのアプリケーション内で属性を使用することはできますが、カメラアプリケーションの属性を変更することはできません。設定した 'process'の値に関係なく、カメラアプリケーション' Activity'は別のプロセスで実行されます属性がマニフェストに設定されていない場合はデフォルト名)。 – Onik

+0

私は参照してください。しかし、SurfaceHolderをベースとした内部カメラのアクティビティには役に立ちます。 –

関連する問題