ロックの下で、WakeLock。この例外は、WakeLock
を解放しようとしたときに発生します。誰が問題になるかもしれないと言うことができます。java.lang.RuntimeException:WakeLockをC2DM_LIB</strong>ロックの下-:私はGoogle Playでの自分のアプリケーションをアップロードしているが、ユーザーは次の例外</p> <p><strong>java.lang.RuntimeExceptionを報告しているC2DM_LIB
答えて
新しいGCMライブラリでも同じ例外がトレースされています。実際に古いC2DMのAndroidライブラリには同じエラーがあり、同じクラッシュがあり、Googleではまだそれを修正していません。統計からわかるように、このクラッシュは約0.1%のユーザーに発生しています。
ライブラリーが何も保持しない(内部ロックカウンターが負になる)WakeLock
を解放しようとすると、GCMライブラリー内のネットワークWakeLock
の誤った解放が問題であることがわかりました。
私は単純な解決策に満足していました。この例外をキャッチして何もしません。余分な仕事をする必要がないため、ウォークロックは何も保持しません。
これを行うには、既に.jar
ファイルをコンパイルするのではなく、プロジェクトでGCMライブラリソースをインポートする必要があります。 GCMライブラリのソースは、 "$ Android_SDK_Home $/extras/google/gcm/gcm-client/src"フォルダ(Android SDKマネージャを使用して最初にダウンロードする必要があります)にあります。
次オープンGCMBaseIntentService
クラス、ライン
sWakeLock.release();
を見つけるとのtry-catchで囲みます。
それは次のようになります。
synchronized (LOCK) {
// sanity check for null as this is a public method
if (sWakeLock != null) {
Log.v(TAG, "Releasing wakelock");
try {
sWakeLock.release();
} catch (Throwable th) {
// ignoring this exception, probably wakeLock was already released
}
} else {
// should never happen during normal workflow
Log.e(TAG, "Wakelock reference is null");
}
}
UPDATE: Alternativallyを、his answerに@fasti示唆されているように、あなたはwakelockが実際にこのロックを保持しているかどうかを確認するためにmWakeLock.isHeld()
メソッドを使用することができます。
あなたはコードを投稿していないので、私がここで示唆したことを既にしているかどうかわかりませんが、 でも例外がありました。 を解放しようとする前に、WakeLockが実際に保持されていることを確認してください。
私はonPauseに追加されたすべてが、この "IF" 文は( "リリース()" の前)であった:
if (mWakeLock.isHeld())
mWakeLock.release();
と例外が消えていました。
この解決策は、受け入れられたものよりも私にとってはきれいだと思われます。 – ottel142
これは、それが正しい方法であるからです。これは受け入れられた答えだったはずです。 – ComputerEngineer88
私のコードに.release()はありませんが(mWakeLockはそれほどありません)、まだこのエラーが発生しています。表示される唯一のスタックトレースは次のとおりです。 java.lang.RuntimeException:アンロックされたWakeLock GCM_LIB [...] com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:252) android.app IntentService $ ServiceHandler.handleMessage(IntentService.java:65) – Ted
isHeld()ソリューションはより良いようですが、実際には失敗する可能性があります。アトミックではない(スレッドセーフではない)ためです。ロックを解除する可能性のあるスレッドが複数ある場合、チェック(isHeld)と別のスレッドをrelaseする呼び出しがロックを解除して失敗する可能性があります。
try/catchを使用すると、スレッドセーフな方法でバグを隠すことができます。
再利用可能な方法でWakeLockリリースをアトミックにする良い選択肢はありますか?これはアトミックな操作でなければなりません。それは文字通りその名前に "Lock"を持っています。 – colintheshots
私はウェイクロックを再初期化せずに新しいオブジェクトでacquireを呼び出す限り、この問題はありません。 wakeLockのインスタンスは1つだけ保持する必要があります(フィールド変数にしてください)。それからあなたはいつもその1つのwakeLockをリリースしていることを知っています。
ので....
if (mWakeLock == null) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
}
try{
mWakeLock.release();//always release before acquiring for safety just in case
}
catch(Exception e){
//probably already released
Log.e(TAG, e.getMessage());
}
mWakeLock.acquire();
- 1. 私は<strong>java1.8</strong>に自分のアプリケーションをアップグレードしてい
- 2. オブジェクトは、私は自分のアプリケーションで<code>infragistics</code><code>igGrid</code>を使用しているが、私は</p> </blockquote>「_super」プロパティまたはメソッドをサポートしていません<code>javascript</code>エラー</p> <blockquote> <p>オブジェクトを取得しています<p>igGrid
- 3. ALT-TABのアプリケーションアイコン自分のアプリケーションの子ウィンドウが開いていると私は<kbd>ALT +</kbd><kbd>TAB</kbd>メニューを表示ピクセル化
- 4. 私は<code>DataFrame</code>を以下しているパンダのデータフレーム
- 5. いけない私は2つのテーブル</p> <p>の1- <strong>ユーザー</strong>(ニュースサイトでユーザー登録を)持っている/データベース内のテーブルは、私がシナリオ</p> <p>私はニュースのWebアプリケーション を持って、次のしている
- 6. は、私がそう<code>stroke</code>として知られている私は私の<code>textblock</code>アウトライン(<em>ない</em>のTextBlock、<em>文字</em>自分自身を)与えたい<code>Silverlight</code>アプリを、持っているXAML
- 7. バンドル識別子は、 <p></p>が、私は自分のアプリケーションの名前を変更し、アプリケーション名
- 8. 私は自分のアプリケーションの設定で、次の<code>invokables</code>セットを持っているサービス呼び出し可能
- 9. 私は<code>docker-compose.yml</code>を以下しているドッキングウィンドウ-構成
- 10. 期待例外ArgumentErrorが、私は以下のクラスの個々のメソッドを呼び出すと、私は<code>ArgumentError</code>を期待していたNoMethodError
- 11. は、私はRailsの3.0.7にルビーを使用していると私は私が<em>リファクタリング</em>、<em>DRY</em>(自分を繰り返してはいけない)と<em></em>に、次のコードを改善する方法をお知りになりたいビューファイル
- 12. Syncano AndroidのSDKには - ユーザーが、私はユーザーがログインしている場合、私がチェックすることができますどのように</p> <pre><code>Syncano.getInstance().loginSocialUser() </code></pre> <p>を使用してログイン
- 13. ブラウザ私は2つのアプリケーション</p> <p>1ルビー(私が書かれていない。私はルビーの何も理解していない)と他のASP.Net</p> <p>Rubyのアプリは、ユーザーのIPアドレスを決定してい
- 14. 私は私の<strong>ASP.NET MVC</strong>アプリケーションで<strong>DI</strong>ため<strong>Ninject</strong>を使用していMVCアプリケーション
- 15. はそれが</p> <p>私のクライアントは私の広告でドメイン<a href="http://adserver.adtech.de/addyn/" rel="nofollow">http://adserver.adtech.de/addyn/</a>を使用してGoogle adsenceの広告タグ</p> <p>(のスクリプトを提供し、私はカスタムロギングシステムを持っているadsence広告タグ
- 16. 私はJSONを収集し、自分のアプリケーションに送信するACEコードエディタを使用していJsonConvert.DeserisalizeObject <t>
- 17. は、私は私のアプリは、アプリストアにアップロードする準備をしようとしていますが、私は、次のコマンド</p> <p>が反応し、ネイティブバンドルを</p> <p>--minify入力したときに私が取得
- 18. サービスを開始することができませんが、私は<code>Manifest</code>ファイルを持っているしかし、私は例外</p> <pre><code>java.lang.RuntimeException: Unable to start service ... java.lang.SecurityException: Requires ACCESS_MOCK_LOCATION secure setting </code></pre> <p>を得たACCESS_MOCK_LOCATIONが
- 19. は、どのように私は私は2つのセグメントを持っている場合</p> <p>が</p> <p>例であるURI
- 20. 私は、ファイルがあるときに、このファイルがオープン(または最高になると私は別のJavaFXの段階を表示したい</p> <pre><code>MainClass.getHostServicesUpg().showDocument("UploadData.xls"); </code></pre> <p>を使用して自分のアプリケーションからデスクトップ上のExcelを表示していますデスクトップ
- 21. は、私は次のマークアップを持っている<a>タグ
- 22. は、私は現時点では自分自身SQLについての詳細を教えしようとしていますし、現在のSQL Server 2008データベース内<code>SUM</code>、<code>COUNT</code>、<code>AVG</code>と<code>GROUP BY</code>機能を使用して報告するいくつかの簡単な販売を実施しようとしています
- 23. が、私は自分のアプリケーション内で次を複製しているよアンドロイド
- 24. コピー/私は<code>server_a</code>にログインし、次のスクリプトを持っている<code>.sh</code>ファイルを、実行してリモートサーバのLinux
- 25. にはJavaScriptを有効にし、私は<code>fetch</code> APIを使用して自分のサーバーに<code>POST</code>データにしようとしていると私はやるたびに、私は空のボディで終わるAPI
- 26. Javascriptの例外TypeError:私は<a href="https://github.com/Julienh/Sharrre" rel="nofollow">https://github.com/Julienh/Sharrre</a></p> <p>私はコピーして自分のテーマのjsファイル内のファイル<code>jquery.sharrre.min.js</code>コードを貼り付けているのjavascript Sharrreを使用してい
- 27. 等</p> <p>ユーザーが持っているのTest1、Test2を、Test3は名前の私は、ユーザーおよびマシンデータモデルとRailsアプリケーションを持っている
- 28. grepは、フォルダを除外して、私は</p> <pre><code>/var/ </code></pre> <p>にいるならば、私は<code>/var/www</code></p> <p>を検索したいLinuxの
- 29. キュウリ/カピバラを使って複数のファイルをアップロードする方法は?私は<code>multiple</code> atributeとファイルフィールドを持っている場合、私は1つのファイル</p> <pre><code>attach_file 'photo', File.join(Rails.root, 'public', 'uploads', 'test.png') </code></pre> <p>のアップロードしかし、何をテストすることができ
- 30. 私は、ユーザーのデータが含まれている<code>UserProfile</code>クラスを持っている
は、あなたがそれを試してみましたか..? – Rookie
はい、私はすべてのプロジェクトでこのソリューションを実装しましたが、それは完全に動作します(2Mユーザー以上のユーザベース) – HitOdessit
ok、ありがとう..... – Rookie