Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Asynctask会减慢我的UI速度吗?_Android_Multithreading_Performance_Android Asynctask - Fatal编程技术网

Android Asynctask会减慢我的UI速度吗?

Android Asynctask会减慢我的UI速度吗?,android,multithreading,performance,android-asynctask,Android,Multithreading,Performance,Android Asynctask,我正在为应用程序创建API。当应用程序启动时(MainActivity.onCreate())将进行初始化调用。这个初始化会导致UI延迟一秒钟,我想消除这种延迟。初始化调用中(较大)事件的顺序如下所示: (1) getDeviceID() (2) setBuild()使用StringBuilder将字符串附加在一起,然后将其删除(代码可根据要求提供) (3) 创建名为DopamineRequest的子类线程的实例。这将发送一个HTTP请求 (4) getInitRequest()通过迭代两个Li

我正在为应用程序创建API。当应用程序启动时(
MainActivity.onCreate()
)将进行初始化调用。这个初始化会导致UI延迟一秒钟,我想消除这种延迟。初始化调用中(较大)事件的顺序如下所示:

(1)
getDeviceID()

(2)
setBuild()
使用
StringBuilder
将字符串附加在一起,然后将其删除(代码可根据要求提供)

(3) 创建名为
DopamineRequest
的子类线程的实例。这将发送一个HTTP请求

(4)
getInitRequest()
通过迭代两个
LinkedHashSet
并使用
System.currentTimeMillis()创建一个
JSONObject

(5) 执行仅覆盖
doInBackground()
函数的AsyncTask线程

如果我了解AsyncTask是如何工作的,那么它是在后台执行的,因此除非UI调用AsyncTask.get()来阻止它,否则它不会对UI产生任何影响

是其他函数导致了延迟还是异步任务

protected static void initBase(Context c){
        if(context!=null)   // already been initialized
            return;

        context = c;
        if(identity == null) {
            identity = new HashMap<String, String>();
        }
        identity.put( "DEVICE_ID", getDeviceID() );           // (1)
        setBuild();                                           // (2)

        URIBuilder uri = new URIBuilder(appID);

        DopamineRequest initRequest = new DopamineRequest();  // (3)
        String initRequest = getInitRequest();                // (4)
        initRequest.execute(uri.getURI(URIBuilder.URI.INIT), initRequest) // (5);

    }
受保护的静态void initBase(上下文c){
if(context!=null)//已初始化
返回;
上下文=c;
if(identity==null){
identity=newhashmap();
}
identity.put(“设备ID”,getDeviceID());/(1)
setBuild();/(2)
URIBuilder uri=新的URIBuilder(appID);
DopamineRequest initRequest=新的DopamineRequest();/(3)
字符串initRequest=getInitRequest();/(4)
initRequest.execute(uri.getURI(URIBuilder.uri.INIT),initRequest)/(5);
}

我用计算机找到了答案。AsyncTask不能减慢UI速度,除非调用onPreExecute()或get()

使用Traceview并找出问题的实际所在。您是否在onPreExecute()中执行任何操作,因为它是在UI线程中调用的。几乎可以肯定它是其他函数。除了@commonware的建议(这是一个很好的建议),您还可以一次删除一行,或者将其发布到显示UI后运行的处理程序中。@commonware非常感谢您建议Traceview!是导致延迟的原因,主要是String.toUpperCase()