Android 为并行小型已知冻结过程创建匿名异步任务是一个好的做法吗?

Android 为并行小型已知冻结过程创建匿名异步任务是一个好的做法吗?,android,multithreading,android-asynctask,anonymous-class,ui-thread,Android,Multithreading,Android Asynctask,Anonymous Class,Ui Thread,例如:你要做一些需要几秒钟的事情,但又不想冻结你的UI,对吗?您可以使用AsyncTask,但不想创建外部(或内部)类来解决一个小的冻结问题 那么,这是一个好的实践吗 package com.example.stackoverflowsandbox; import android.os.AsyncTask; public class Foo { // E.g. before call foo method you change you Activity to loading stat

例如:你要做一些需要几秒钟的事情,但又不想冻结你的UI,对吗?您可以使用AsyncTask,但不想创建外部(或内部)类来解决一个小的冻结问题

那么,这是一个好的实践吗

package com.example.stackoverflowsandbox;

import android.os.AsyncTask;

public class Foo {
    // E.g. before call foo method you change you Activity to loading state.
    private void foo() {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground( final Void ... params ) {
                // something you know that will take a few seconds

                return null;
            }

            @Override
            protected void onPostExecute( final Void result ) {
                // continue what you are doing...

                Foo.this.continueSomething();
            }
        }.execute();
    }

    private void continueSomething() {
        // some code...
    }
}
package com.example.stackoverflowsandbox;
导入android.os.AsyncTask;
公开课Foo{
//例如,在调用foo方法之前,您将活动更改为加载状态。
私人文件{
新建异步任务(){
@凌驾
受保护的Void doInBackground(最终Void…参数){
//一些你知道需要几秒钟的事情
返回null;
}
@凌驾
后期执行时受保护的作废(最终作废结果){
//继续你正在做的。。。
Foo.this.continueSomething();
}
}.execute();
}
私有void continuemething(){
//一些代码。。。
}
}

当我压缩位图并循环大数组以更新项目中的一些数据时,我遇到了这种情况。

是的,但不是您这样做的方式

请记住,启动蜂巢异步任务的默认执行模型是串行的

  new AsyncTask<Void, Void, Void>() {
         ....
         ....
  }.execute(); <------ serial execution
newasynctask(){
....
....

}.execute();我不知道这与创建内部类相比如何节省任何工作,只是看起来非常混乱,这取决于。。。唯一可能发生的事情是线程(AsyncTask)在活动放在后台或被销毁后继续运行。但一般来说,这很糟糕,因为匿名类是在代码中的某个地方借用的。只是为了解决可读性问题,请记住,从匿名内部类创建的对象是使用符号
OuterClass$2
调用的,如果您开始嵌套内部类,调试可能会很困难,但不会看到任何问题,但在某些情况下,您可能更愿意创建一个外部定义以供重用。我个人更喜欢外部异步任务/侦听器模式。有一个关于创建不适用于您的案例的私有内部类的性能提示,但值得一读。谢谢,但我的意思是if是这样一个好的实践代码。=]如果“像那样”是指匿名异步任务的实例化,那么答案是肯定的。代码执行方面没有问题,即使是刚起步的android开发人员也会知道您的意思分类:execute()只针对以这种方式调用的其他异步任务串行运行任务。运行它们的只有一个后台线程,但调用程序仍然是并行的。我不相信你总是想在后台并行地做事情。串行通常更容易,但仍然不会冻结UI。“从蜂巢开始,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误。”
  new AsyncTask<Void, Void, Void>() {
         ....
         ....
  }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null); <------ parallel execution