2

Android Parse SDK を使用して Android アプリを構築しています。これは、初期化時に Parse からすべてのデータを取得し、ローカルに保存します。後で、必要なエンティティ (ParseObjects) のみを更新します。一部の Pin() 操作からは何も返されません。同様に、PinInBackground() とバリアントを使用するとコールバックもありません。Unpin() でも同じことが起こります。

私のコードは次のようなものです。Parse データ テーブルごとに updated_at と updated_locally_at を含む ParseObject である ControlDate のリストがあります。これを使用して、特定のテーブルをクエリする必要があるかどうかを判断します (クエリの数を減らします)。次のように、IntentService でデータ更新を実行するときに、このリストを反復処理します。

protected void onHandleIntent(Intent intent) {

for(ControlDate d : mUpdateQueue) { // mUpdateQueue is the list of ControlDate
    if(d.entityNeedsUpdate()) { // returns true if updated_at > updated_locally_at   
        updateEntity(d);
    }   
}

private boolean updateEntity(ControlDate d) {
    String tableName = d.getTableName();   
    Date lastLocalUpdate = d.getLastLocalUpdate();
    ParseQuery<ParseObject> qParse = ParseQuery.getQuery(tableName);  
    qParse.whereGreaterThan("updated_at", lastLocalUpdate);    
    try {   
        // update the entities       
        List<ParseObject> entities = qParse.find();       
        ParseObject.pinAll(entities); // SOMETIMES GETS STUCK (no return)

        // update the associated ControlDate       
        d.setLastLocalUpdate(new Date());  // updated_locally_at = now
        d.pin();  // SOMETIMES GETS STUCK (no return)
    }   
    catch(ParseException e) {   
         // error
    }   
}

}

これらの操作は時々返されません。パターンを見つけようとしていますが、まだ運がありません。エンティティの一部にポインター配列を追加したときに発生し始めたようです。したがって、pin() の再帰的な性質による可能性があると思います。ただし、d.pin() の場合のように、他を参照しない ParseObjects でスタックすることもあるのが奇妙です。

私が試したこと:

  • forループをListIteratorに変更します(ControlDatesのリストを変更しているためですが、これは必要ではないと思います)。
  • スレッド化されたバリアントの使用 (例: PinInBackground()) - コールバックなし。
  • 各エンティティを個別にピン留めする (ループ内で pin() を実行する) - かなり遅く、それでもスタックします。
  • デバッグ - スレッドはここでブロックするだけです: http://i.imgur.com/oBDjpCw.png?1

私はこれに夢中になっています、助けていただければ幸いです!

PS .: これを見つけましたhttps://github.com/BoltsFramework/Bolts-Android/issues/48 これは、Android SDK で使用されているボルト ライブラリの未解決の問題であり、これを引き起こしている可能性があります (多分?)。とにかく、 pin() が返されない原因がデッドロックにつながる「観察されていない例外」である可能性があるにもかかわらず、どうすれば問題を解決できるかわかりません。

4

0 に答える 0