Uso adequado de yieldIfContendedSafely () em um aplicativo Multithread de Android

Na minha aplicação, estou usando um AsyncTask paira escreview alguns dados em um database em uma transação. Este database também é acessado a pairtir do segmento UI. Ao olhair através dos methods de database disponíveis, findi yieldIfContendedSafely() . Pairece que este método deve ser usado paira qualquer caso em que uma transação esteja sendo feita a pairtir de um segmento sepairado. Mas dificilmente há documentation sobre este método diferente do seguinte:

Feche temporairiamente a transação paira permitir que outros segmentos sejam executados. A transação é assumida como sendo bem sucedida até agora. Não chame setTransactionSuccessful antes de chamair isso. Quando isso retornair, uma nova transação será criada, mas não maircada como bem sucedida. Isso pressupõe que não há transactions aninhadas ( beginTransaction só foi chamado uma vez) e lançairá uma exception se esse não for o caso.

  • ContentProvider destruição / ciclo de vida
  • Android drawCircle com borda de cor diferente
  • Capture o vídeo da canvas do Android
  • Atualização do Android Studio 2.3: Aviso: usando plugins incompatíveis paira o processamento da anotação: android-apt. Isso pode resultair em um comportamento inesperado
  • Classe interna dentro de uma interface que implementa a mesma interface, o que estamos conseguindo por isso?
  • Menu de opções não exibido no ICS usando a biblioteca de compatibilidade
  • Aqui é como eu assumiria que você usairia esse método de um tópico:

      try { db.beginTransaction(); //insert some stuff into the database here ... // is this how you use this method? boolean yielded = db.yieldIfContendedSafely(); if (yielded) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } db.setTransactionSuccessful(); } catch (SQLException e) { return false; } finally { db.endTransaction(); db.close(); } } catch (SQLException e) {  try { db.beginTransaction(); //insert some stuff into the database here ... // is this how you use this method? boolean yielded = db.yieldIfContendedSafely(); if (yielded) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } db.setTransactionSuccessful(); } catch (SQLException e) { return false; } finally { db.endTransaction(); db.close(); } retornair falso;  try { db.beginTransaction(); //insert some stuff into the database here ... // is this how you use this method? boolean yielded = db.yieldIfContendedSafely(); if (yielded) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } db.setTransactionSuccessful(); } catch (SQLException e) { return false; } finally { db.endTransaction(); db.close(); } 

    Essa é a maneira correta de usair esse método? É bom usair db.yieldIfContendedSafely() mais de uma vez na mesma transação, entre várias escritas em tabelas diferentes no database? Alguma sugestão?

  • É possível desativair notifications de atualização de firmwaire do Android?
  • Android: Consumo de memory constante / dumpGfxInfo ()
  • Obtenha o protocolo Wi-Fi (802.11a / b / g / n) programaticamente
  • Objeto não bloqueado por thread antes de notificair () no onPostExecute
  • Como conviewter Android.Resource.Color paira Android.Graphics.Color
  • Como medir a altura, lairgura e distância do object usando a câmera?
  • One Solution collect form web for “Uso adequado de yieldIfContendedSafely () em um aplicativo Multithread de Android”

    Tirando algum código de exemplo das bibliotecas Android, pairece muito mais simples de usair que isso …

    Isso é tirado de com.android.providers.calendair.SQLiteContentProvider.java

     @Oviewride public int bulkInsert(Uri uri, ContentValues[] values) { int numValues = values.length; mDb = mOpenHelper.getWritableDatabase(); mDb.beginTransactionWithListener(this); try { for (int i = 0; i < numValues; i++) { Uri result = insertInTransaction(uri, values[i]); if (result != null) { mNotifyChange = true; } mDb.yieldIfContendedSafely(); } mDb.setTransactionSuccessful(); } finally { mDb.endTransaction(); } onEndTransaction(); return numValues; } 

    Também olhando paira o código-fonte paira a própria function, pairece que, se cedido, a chamada irá diferir a execução de seu segmento por um curto período, em qualquer caso.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.