Android Asynctask会减慢我的UI速度吗?
我正在为应用程序创建API。当应用程序启动时(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
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()