在Android中啥是异步执行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Android中啥是异步执行相关的知识,希望对你有一定的参考价值。
我来给你讲解一下异步的使用吧,如果你不是开发人员,直接跳到第三,异步的概念 和 同步的区别:
一、在你的Activity中写一个内部类:
private class TestAsyncTask extends AsyncTask<String, Void, Boolean>
@Override
protected void onPreExecute()
//最先执行的就是这个。
@Override
protected Boolean doInBackground(String... params)
//这个是在后台执行的东西,就是说,它自动另外开了个线程运行,不影响你现在做的东西。
@Override
protected void onPostExecute(Boolean result)
if (result)
//后台执行的完毕后,它会用Result通知这里,就是执行这里了。
else
//所以最好判断一下result,写个else,判断后台执行的东西是不是出问题了。
二,在你的onCreate的时候启动这个异步,启动代码如下:
new TestAsyncTask().execute("");
三,异步 和 同步的区别
异步的好处,就是把一些东西,特别是耗时间的东西扔到后台去运行了,doInBackground,程序可以继续做自己的事情,防止程序卡在那里失去响应。
同步执行的话,就是程序会呆板地从头执行到尾,耗时间的东西不执行完,程序不会继续往下走,等待时间长的话,有时候就会造成失去响应了。
我就是搞开发的,呵呵。我的代码你直接贴进去就能用的。打字贴代码辛苦啊~~望采纳。也欢迎追问追问
我也是搞开发的,我也弄了你这个android异步的例子
protected void onPostExectute(String result)
// doInBackground返回进触发,抵免话说,就是doInBackground执行完后触发
// 这里的result就是上面doInBackground执行后的返回 值,所以这时是"执行完毕"
MainActivity.this.setTitle(result);
System.out.println(result);
super.onPostExecute(result);
哈哈,咱们都是搞开发的代码工。算是有缘哈!
恩,你说得对,
onPostExecute(Boolean result)里的参数result,就是doInBackground的返回值。就是用它去触发onPostExecute的。
这个参数是个布尔型,不是String型啊。你的追问里,把参数写成String了。
一、你先随便让doInBackground返回一个值(Boolean ):
@Override
protected Boolean doInBackground(String... params)
return true; //或者你让它return false;
二、然后你这样打印出来看
@Override
protected void onPostExecute(Boolean result)
super.onPostExecute(result);
MainActivity.this.setTitle("result is: " + result);
System.out.println("result is: " + result);
这样你就一目了然啦。调试成功了吗?
2、同步执行就是,你告诉一个程序A去启动执行,然后你就Hold住了,一直等程序A运行完毕并把结果告诉你,再根据结果运行不同的分支。
java中啥同步啥是异步分别用在啥地方
java中什么同步什么是异步分别用在什么地方
上传下载文件要用什么步
有关同步:
synchronized用来修饰一个方法或者一个代码块,它用来保证在同一时刻最多只有一个线程执行该段代码。
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。
五、以上规则对其它对象锁同样适用。
示例代码:
public class Thread1 implements Runnable
public void run()
synchronized(this)
for (int i = 0; i < 5; i++)
System.out.println(Thread.currentThread().getName() + " synchronized loop " + i);
public static void main(String[] args)
Thread1 t1 = new Thread1();
Thread ta = new Thread(t1, "A");
Thread tb = new Thread(t1, "B");
ta.start();
tb.start();
结果:
A synchronized loop 0
A synchronized loop 1
A synchronized loop 2
A synchronized loop 3
A synchronized loop 4
B synchronized loop 0
B synchronized loop 1
B synchronized loop 2
B synchronized loop 3
B synchronized loop 4 参考技术A 同步可以用在多个子线程访问同一个数据库表时,这是要保证数据的一致性和完整性,在数据访问层就要加同步锁啦,不加锁可能就会报数据库被锁的异常;异步一般用在耗时的操作中,比如:联网取数据,这个数据量比较大,很要点时间,而我在取数据时又想继续做别的事情,等我把别的事情做完在来处理联网得到的数据。异步操作就等于帮你节约了一些时间。 参考技术B 深入的不太懂,但是大概粗浅一点我说下我的理解。
后台查询完成之后返回到前台:可以理解为同步,页面上的数据是一起刷新的。
异步:比如说我们提交什么东西的时候,验证身份证是否合法,我们可以用ajax异步进行验证、
就是不用刷新整个页面,直接从后台拿数据到前台。页面不用重新加载数据。
上传文件可以用,不过有一个上传文件的小插件非常好用。好像是jquery-fiel就是一个jquery的上传插件用的ajax实现追问
syncronize是什么怎么用
追答单例吧
以上是关于在Android中啥是异步执行的主要内容,如果未能解决你的问题,请参考以下文章