我的应用程序与创建MyApplication extends Application
AsyncTask和应用程序的生命周期?
开始我必须通过报警,当运行完(获取GPS位置)服务,我开始AsyncTask
从该服务做同步与我的服务器上的后台运行的服务。
这是我的理解:
- 只有一个
Application
可以在Android操作系统同时运行。我正在谈论MY应用程序的实例。所以,我无法从同一个软件包中运行2个Application对象实例。 - 如果我看到消息我登录
Application.onCreate()
这意味着操作系统关闭我的应用程序。 - 服务在UI线程上运行,即使不可见。
- 如果我从我的服务中产生
AsyncTask
,并且OS杀死我的应用程序 - AsyncTask get也会终止。我无法控制我的AsyncTask的优雅终止。 - 如果我有闹钟预定和应用程序关闭 - 操作系统将发送广播,然后将启动应用程序,然后服务。
- 闹钟每5分钟开始一次服务。服务尝试获取最多1分钟的位置,并在完成时启动AsyncTask。所以,我的AsyncTask在下一次服务开始前有4分钟。内部异步任务我做DB访问,这导致像下面列出的问题..
我的理解是正确的?我这样问的理由是因为我从所有运行应用程序的设备写入日志,并且有时会观察到奇怪的行为。大多数设备几乎全天候运行应用程序,但在某些情况下,我始终都会看到Application_Start记录的事件。
有没有什么办法来模拟我的测试系统的应用程序关闭?我做错了什么,需要以不同的方式做?我想我的syncronize后台处理,因为有阅读了大量的数据/写,并阻止..
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)
By#1我是指我的应用程序,不是所有的应用程序。我是说,如果在Application.onCreate内部,我记录事件并看到它们 - 这意味着操作系统正在停止我的应用程序 – katit 2012-07-26 17:34:01
查看我更新的帖子。 – 2012-07-26 17:38:34
#1真的让我感到困扰。不关于所有安装的应用程序我只谈论我的申请。如果我想如何运行我的应用程序的多个实例? – katit 2012-07-26 17:44:12