私のアプリケーションは作成から始まりますMyApplication extends Application
アラームによってバックグラウンドで実行されるサービスがあり、サービスの実行が完了すると(GPS位置を取得)AsyncTask
、サーバーと同期するためにそのサービスから開始します。
これが私の理解です:
Application
AndroidOSで一度に実行できるのは1つだけです。私は私のアプリケーションのインスタンスについて話している。したがって、同じパッケージからアプリケーションオブジェクトの2つのインスタンスを実行する方法はありません。- 内部にログインしたメッセージが表示された場合
Application.onCreate()
は、OSがアプリケーションをシャットダウンしたことを意味します。 - サービスは、表示されていなくてもUIスレッドで実行されます。
- サービスからスポーン
AsyncTask
し、OSがアプリケーションを強制終了した場合、AsyncTaskgetも終了します。AsyncTaskの正常な終了を制御する方法はありません。 - アラームがスケジュールされていて、アプリケーションがダウンしている場合、OSはブロードキャストを送信し、次にアプリケーションを開始してからサービスを開始します。
- アラームは5分ごとにサービスを開始します。サービスは最大1分間位置を取得しようとし、完了するとAsyncTaskを開始します。したがって、私のAsyncTaskには、次のサービス開始の4分前があります。非同期タスク内でDBアクセスを行うと、以下のような問題が発生します。
私の理解は正しいですか?理由私はアプリケーションを実行するすべてのデバイスからログを書き込み、時々奇妙な動作を観察するので、これを求めています。ほとんどのデバイスはほぼ24時間年中無休でアプリケーションを実行しますが、一部のデバイスでは、Application_Startログイベントが常に表示されます。
テストのためにシステムごとにアプリケーションのシャットダウンをシミュレートする方法はありますか?私が間違っていることはあり、別の方法で行う必要がありますか?データの読み取り/書き込みが多く、ブロックされているため、バックグラウンド処理を同期させたいと思います。
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14)
at android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow(Native Method)
at android.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:838)
at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:836)
at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:143)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:196)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:236)
at com.idatt.data.LockData.Lock(LockData.java:37)
at com.idatt.common.AsyncProcessor.doInBackground(AsyncProcessor.java:154)
at com.idatt.common.AsyncProcessor.doInBackground(AsyncProcessor.java:18)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
... 4 more
android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (code 14)
at android.database.sqlite.SQLiteConnection.nativeExecuteForCursorWindow(Native Method)
at android.database.sqlite.SQLiteConnection.executeForCursorWindow(SQLiteConnection.java:838)
at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:836)
at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:143)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:196)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:236)
at com.idatt.data.LockData.Lock(LockData.java:37)
at com.idatt.common.AsyncProcessor.doInBackground(AsyncProcessor.java:154)
at com.idatt.common.AsyncProcessor.doInBackground(AsyncProcessor.java:18)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)