【问题标题】:Android: do activity lifecycle events stop methods which are running?Android:活动生命周期事件是否停止正在运行的方法?
【发布时间】:2013-09-28 15:19:30
【问题描述】:

如果在执行方法时发生了一些活动生命周期事件会怎样?
例如,我的活动有一些将 JSON 文本文件(几十 Kb)写入磁盘的方法。是不是设计错了? 或者,一般来说,考虑有两条指令要执行的情况:第一条执行重要操作,第二条根据第一条的结果更新一些数据。

类似:

value=performOperationAndYeldResult();
updateAppData(value);

如果生命周期事件发生在第一次调用之后和第二次调用之前,或者在它执行时会发生什么?
我在服务中放置了“长”操作,但我无法为整个应用程序中的每个关键数据更新创建服务。我想我错过了什么,所以我什么都不怕。也许恢复或重新启动的活动会继续操作,以便完成。 无论如何我在这里问:方法是完成还是继续?

【问题讨论】:

  • 强烈建议将长时间运行的操作放在 Service 中。为什么不能使用服务?
  • 操作是在UI线程中进行的吗?如果是,我建议在辅助线程中执行它们。在辅助线程中发生是安全的,即使活动被破坏,线程也会继续运行。
  • 或者根据@NitinSethi 的回复,使用服务或更好的异步任务。对于写作操作,我建议实现一个 AsyncTask。阅读有关如何使用它的信息。 developer.android.com/reference/android/os/AsyncTask.html
  • AsyncTask 不适合运行长任务。根据 API 文档,建议仅用于运行“几”秒的短操作。
  • "few几十kb" 我猜不会花很长时间......他已经说过长时间操作正在发生在一个服务中,但是你不能为任何 10 的操作创建一个服务秒时间

标签: android file methods android-activity activity-lifecycle


【解决方案1】:
new PerformOperationAsyncTask(someValue);

private class PerformOperationAsyncTask extends AsyncTask<Object, Void, Object> {

        protected Long doInBackground(Object... values) {

            //this is taking place in secondary thread          
             Object returnValue = performOperationAndYeldResult(values[0]);

             return returnValues;
         }

         protected void onPostExecute(Object result) {
             //this is taking place in the UI thread
             updateAppData(value);
         }
     }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2013-01-13
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    相关资源
    最近更新 更多