- 浏览: 238941 次
- 性别:
- 来自: 广州
最新评论
-
Janne:
你好 有源代码?可以发到我的邮箱里学学吗?2731049993 ...
achartengine画出动态折线图的效果 -
anbo724:
我的邮箱 anbo724@gmail.com谢谢@
achartengine画出动态折线图的效果 -
anbo724:
你好 请问有源码没《?谢谢
achartengine画出动态折线图的效果 -
weiday123:
额,觉得这个会不会占堆内存?
AdapterView、Adapter优化 -
wen742538485:
为什么没有呢?权限没加还是发创建了给你删了再想创建?是不允许重 ...
Android中为你的应用程序添加桌面快捷方式
创建新线程的常用方式:
1. 直接使用Thread创建
Thread thread = new Thread();
thread.start();
2. 扩展java.lang.Thread类
Thread类的定义public class Threadextends Object implements Runnable(){…}
扩展Thread类的实质其实也是实现Runnable接口,只不过Thread类继承了Object类方法
3. 实现Runnable接口
具体代码:
1. 扩展java.lang.Thread类
public class test3_4 extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyThread myThread = new MyThread();
myThread.start();
}
class MyThread extends Thread{
public void run() {
System.out.println("zz");
}
}
}
注:看见网上有人举这个例子
MyThread myThread = new MyThread();
myThread.start();
myThread.start();
myThread.start();
我在模拟器上测试了运行不过,不能得到预期结果。不知道为什么!runnable的也不行!
2. 实现Runnable接口
public class test3_4 extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyThread myThread = new MyThread();
new Thread(myThread).start();
}
class MyThread implements Runnable{
public void run() {
System.out.println("zz");
}
}
}
或者
public class test3_4 extends Activity implements OnClickListener, Runnable{
private Button button;
private TextView text;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button)findViewById(R.id.button);
text = (TextView)findViewById(R.id.text);
button.setOnClickListener(this);
}
public void onClick(View v) {
Thread thread = new Thread(this);
thread.start();
}
public void run() {
System.out.println("zz");
}
}
经典实例:
多个窗口一起卖火车票问题。假设有3个窗口同时售票,共有10张火车票代售。启动三个线程卖共同的10张票。
1. 使用下面的代码试图实现功能
public class test3_5 extends Activity implements OnClickListener{
private Button button;
private TextView text;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button)findViewById(R.id.button);
text = (TextView)findViewById(R.id.text);
button.setOnClickListener(this);
}
public void onClick(View v) {
MyThread myThread1 = new MyThread();
MyThread myThread2= new MyThread();
MyThread myThread3 = new MyThread();
myThread1.start();
myThread2.start();
myThread3.start();
}
class MyThread extends Thread{
private int tickets = 10;
public void run() {
for(int i = 0; i< 200; i++){
if(tickets > 0)
{
System.out.println(Thread.currentThread().getName() + "==>" + tickets--);
}
}
}
}
}
运行结果:
05-11 08:24:09.426: INFO/System.out(6331): Thread-8==>10
05-11 08:24:09.457: INFO/System.out(6331): Thread-8==>9
05-11 08:24:09.526: INFO/System.out(6331): Thread-8==>8
05-11 08:24:09.548: INFO/System.out(6331): Thread-8==>7
05-11 08:24:09.556: INFO/System.out(6331): Thread-8==>6
05-11 08:24:09.556: INFO/System.out(6331): Thread-8==>5
05-11 08:24:09.576: INFO/System.out(6331): Thread-8==>4
05-11 08:24:09.597: INFO/System.out(6331): Thread-10==>10
05-11 08:24:09.606: INFO/System.out(6331): Thread-10==>9
05-11 08:24:09.606: INFO/System.out(6331): Thread-10==>8
05-11 08:24:09.648: INFO/System.out(6331): Thread-8==>3
05-11 08:24:09.656: INFO/System.out(6331): Thread-9==>10
05-11 08:24:09.656: INFO/System.out(6331): Thread-9==>9
05-11 08:24:09.666: INFO/System.out(6331): Thread-8==>2
05-11 08:24:09.666: INFO/System.out(6331): Thread-8==>1
05-11 08:24:09.686: INFO/System.out(6331): Thread-9==>8
05-11 08:24:09.686: INFO/System.out(6331): Thread-10==>7
05-11 08:24:09.686: INFO/System.out(6331): Thread-10==>6
05-11 08:24:09.737: INFO/System.out(6331): Thread-9==>7
05-11 08:24:09.746: INFO/System.out(6331): Thread-9==>6
05-11 08:24:09.746: INFO/System.out(6331): Thread-9==>5
05-11 08:24:09.766: INFO/System.out(6331): Thread-10==>5
05-11 08:24:09.776: INFO/System.out(6331): Thread-10==>4
05-11 08:24:09.776: INFO/System.out(6331): Thread-10==>3
05-11 08:24:09.776: INFO/System.out(6331): Thread-10==>2
05-11 08:24:09.846: INFO/System.out(6331): Thread-9==>4
05-11 08:24:09.846: INFO/System.out(6331): Thread-9==>3
05-11 08:24:09.846: INFO/System.out(6331): Thread-9==>2
05-11 08:24:09.886: INFO/System.out(6331): Thread-9==>1
05-11 08:24:09.886: INFO/System.out(6331): Thread-10==>1
分析:
运行结果与预期不一致,分析可以看出3个线程各种卖各自的10张票,而不是共同的10张票。
在上面的代码中,只能保证:每个线程都将启动,每个线程都将运行直到完成。一系列线程以某种顺序启动并不意味着将按该顺序执行。对于任何一组启动的线程来说,调度程序不能保证其执行次序,持续时间也无法保证。
2. 只修改onClick里面的代码,并分析运行结果
public void onClick(View v) {
//实例化线程对象
MyThread myThread = new MyThread();
new Thread(myThread, "窗口1").start();
new Thread(myThread, "窗口2").start();
new Thread(myThread, "窗口3").start();
}
运行结果:
05-11 08:41:50.946: INFO/System.out(6790): 窗口2==>10
05-11 08:41:50.956: INFO/System.out(6790): 窗口2==>8
05-11 08:41:50.986: INFO/System.out(6790): 窗口1==>9
05-11 08:41:50.996: INFO/System.out(6790): 窗口1==>5
05-11 08:41:51.006: INFO/System.out(6790): 窗口1==>4
05-11 08:41:51.018: INFO/System.out(6790): 窗口2==>6
05-11 08:41:51.018: INFO/System.out(6790): 窗口2==>3
05-11 08:41:51.026: INFO/System.out(6790): 窗口2==>2
05-11 08:41:51.036: INFO/System.out(6790): 窗口1==>1
05-11 08:41:51.046: INFO/System.out(6790): 窗口3==>7
分析:
我认为此处3个窗口已经是在卖共同的10张票了,只不过由于没有进行线程同步才造成数据混乱。
线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。
3. 下面继续修改代码,验证我刚得猜测。
public void onClick(View v) {
//实例化线程对象
MyThread myThread = new MyThread();
new Thread(myThread, "窗口1").start();
new Thread(myThread, "窗口2").start();
new Thread(myThread, "窗口3").start();
}
class MyThread extends Thread{
private int tickets = 10;
public void run() {
for(int i = 0; i< 200; i++){
sell();
}
}
public synchronized void sell(){
if(tickets > 0)
{
System.out.println(Thread.currentThread().getName() + "==>" + tickets--);
}
}
}
运行结果:
05-11 08:53:31.986: INFO/System.out(7116): 窗口1==>10
05-11 08:53:32.006: INFO/System.out(7116): 窗口1==>9
05-11 08:53:32.016: INFO/System.out(7116): 窗口1==>8
05-11 08:53:32.066: INFO/System.out(7116): 窗口1==>7
05-11 08:53:32.086: INFO/System.out(7116): 窗口1==>6
05-11 08:53:32.106: INFO/System.out(7116): 窗口1==>5
05-11 08:53:32.106: INFO/System.out(7116): 窗口1==>4
05-11 08:53:32.126: INFO/System.out(7116): 窗口1==>3
05-11 08:53:32.146: INFO/System.out(7116): 窗口1==>2
05-11 08:53:32.146: INFO/System.out(7116): 窗口1==>1
分析:
一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以获得锁,直到第一个线程释放(或返回)锁。这也意味着任何其他线程都不能进入该对象上的synchronized方法或代码块,直到该锁被释放。
释放锁是指持锁线程退出了synchronized同步方法或代码块。
上述代码没有Thread.sleep(10),换句话说线程一一直处于运行状态,没有释放锁,没有给其他线程运行的机会。
4. 根据上述分析,修改代码如下:
public void onClick(View v) {
//实例化线程对象
MyThread myThread = new MyThread();
new Thread(myThread, "窗口1").start();
new Thread(myThread, "窗口2").start();
new Thread(myThread, "窗口3").start();
}
class MyThread extends Thread{
private int tickets = 10;
public void run() {
for(int i = 0; i< 200; i++){
try{
sell();
Thread.sleep(10);
}catch (InterruptedException e) {
System.out.println("我被打断了" + Thread.currentThread().getName());
e.printStackTrace();
}
}
}
public synchronized void sell(){
if(tickets > 0)
{
System.out.println(Thread.currentThread().getName() + "==>" + tickets--);
}
}
}
运行结果:
05-11 09:17:07.496: INFO/System.out(7898): 窗口1==>10
05-11 09:17:07.528: INFO/System.out(7898): 窗口1==>9
05-11 09:17:07.546: INFO/System.out(7898): 窗口1==>8
05-11 09:17:07.577: INFO/System.out(7898): 窗口1==>7
05-11 09:17:07.626: INFO/System.out(7898): 窗口3==>6
05-11 09:17:07.626: INFO/System.out(7898): 窗口2==>5
05-11 09:17:07.636: INFO/System.out(7898): 窗口1==>4
05-11 09:17:07.646: INFO/System.out(7898): 窗口2==>3
05-11 09:17:07.646: INFO/System.out(7898): 窗口1==>2
05-11 09:17:07.656: INFO/System.out(7898): 窗口3==>1
分析:
此次得出的正是我们想要的结果!O(∩_∩)O~
5. 使用实现Runnable接口的方法重新实现上述功能
public void onClick(View v) {
//实例化线程对象
MyThread myThread = new MyThread();
new Thread(myThread, "窗口1").start();
new Thread(myThread, "窗口2").start();
new Thread(myThread, "窗口3").start();
}
class MyThread implements Runnable{
private int tickets = 10;
public void run() {
for(int i = 0; i< 200; i++){
try{
sell();
Thread.sleep(10);
}catch (InterruptedException e) {
System.out.println("我被打断了" + Thread.currentThread().getName());
e.printStackTrace();
}
}
}
public synchronized void sell(){
if(tickets > 0)
{
System.out.println(Thread.currentThread().getName() + "==>" + tickets--);
}
}
关于线程的理解个人推荐一篇非常棒的文章,里面对java线程进行的详细的总结,仔细阅读必有收获!
[url]http://lavasoft.blog.51cto.com/62575/27069/
[/url]
1. 直接使用Thread创建
Thread thread = new Thread();
thread.start();
2. 扩展java.lang.Thread类
Thread类的定义public class Threadextends Object implements Runnable(){…}
扩展Thread类的实质其实也是实现Runnable接口,只不过Thread类继承了Object类方法
3. 实现Runnable接口
具体代码:
1. 扩展java.lang.Thread类
public class test3_4 extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyThread myThread = new MyThread();
myThread.start();
}
class MyThread extends Thread{
public void run() {
System.out.println("zz");
}
}
}
注:看见网上有人举这个例子
MyThread myThread = new MyThread();
myThread.start();
myThread.start();
myThread.start();
我在模拟器上测试了运行不过,不能得到预期结果。不知道为什么!runnable的也不行!
2. 实现Runnable接口
public class test3_4 extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyThread myThread = new MyThread();
new Thread(myThread).start();
}
class MyThread implements Runnable{
public void run() {
System.out.println("zz");
}
}
}
或者
public class test3_4 extends Activity implements OnClickListener, Runnable{
private Button button;
private TextView text;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button)findViewById(R.id.button);
text = (TextView)findViewById(R.id.text);
button.setOnClickListener(this);
}
public void onClick(View v) {
Thread thread = new Thread(this);
thread.start();
}
public void run() {
System.out.println("zz");
}
}
经典实例:
多个窗口一起卖火车票问题。假设有3个窗口同时售票,共有10张火车票代售。启动三个线程卖共同的10张票。
1. 使用下面的代码试图实现功能
public class test3_5 extends Activity implements OnClickListener{
private Button button;
private TextView text;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button)findViewById(R.id.button);
text = (TextView)findViewById(R.id.text);
button.setOnClickListener(this);
}
public void onClick(View v) {
MyThread myThread1 = new MyThread();
MyThread myThread2= new MyThread();
MyThread myThread3 = new MyThread();
myThread1.start();
myThread2.start();
myThread3.start();
}
class MyThread extends Thread{
private int tickets = 10;
public void run() {
for(int i = 0; i< 200; i++){
if(tickets > 0)
{
System.out.println(Thread.currentThread().getName() + "==>" + tickets--);
}
}
}
}
}
运行结果:
05-11 08:24:09.426: INFO/System.out(6331): Thread-8==>10
05-11 08:24:09.457: INFO/System.out(6331): Thread-8==>9
05-11 08:24:09.526: INFO/System.out(6331): Thread-8==>8
05-11 08:24:09.548: INFO/System.out(6331): Thread-8==>7
05-11 08:24:09.556: INFO/System.out(6331): Thread-8==>6
05-11 08:24:09.556: INFO/System.out(6331): Thread-8==>5
05-11 08:24:09.576: INFO/System.out(6331): Thread-8==>4
05-11 08:24:09.597: INFO/System.out(6331): Thread-10==>10
05-11 08:24:09.606: INFO/System.out(6331): Thread-10==>9
05-11 08:24:09.606: INFO/System.out(6331): Thread-10==>8
05-11 08:24:09.648: INFO/System.out(6331): Thread-8==>3
05-11 08:24:09.656: INFO/System.out(6331): Thread-9==>10
05-11 08:24:09.656: INFO/System.out(6331): Thread-9==>9
05-11 08:24:09.666: INFO/System.out(6331): Thread-8==>2
05-11 08:24:09.666: INFO/System.out(6331): Thread-8==>1
05-11 08:24:09.686: INFO/System.out(6331): Thread-9==>8
05-11 08:24:09.686: INFO/System.out(6331): Thread-10==>7
05-11 08:24:09.686: INFO/System.out(6331): Thread-10==>6
05-11 08:24:09.737: INFO/System.out(6331): Thread-9==>7
05-11 08:24:09.746: INFO/System.out(6331): Thread-9==>6
05-11 08:24:09.746: INFO/System.out(6331): Thread-9==>5
05-11 08:24:09.766: INFO/System.out(6331): Thread-10==>5
05-11 08:24:09.776: INFO/System.out(6331): Thread-10==>4
05-11 08:24:09.776: INFO/System.out(6331): Thread-10==>3
05-11 08:24:09.776: INFO/System.out(6331): Thread-10==>2
05-11 08:24:09.846: INFO/System.out(6331): Thread-9==>4
05-11 08:24:09.846: INFO/System.out(6331): Thread-9==>3
05-11 08:24:09.846: INFO/System.out(6331): Thread-9==>2
05-11 08:24:09.886: INFO/System.out(6331): Thread-9==>1
05-11 08:24:09.886: INFO/System.out(6331): Thread-10==>1
分析:
运行结果与预期不一致,分析可以看出3个线程各种卖各自的10张票,而不是共同的10张票。
在上面的代码中,只能保证:每个线程都将启动,每个线程都将运行直到完成。一系列线程以某种顺序启动并不意味着将按该顺序执行。对于任何一组启动的线程来说,调度程序不能保证其执行次序,持续时间也无法保证。
2. 只修改onClick里面的代码,并分析运行结果
public void onClick(View v) {
//实例化线程对象
MyThread myThread = new MyThread();
new Thread(myThread, "窗口1").start();
new Thread(myThread, "窗口2").start();
new Thread(myThread, "窗口3").start();
}
运行结果:
05-11 08:41:50.946: INFO/System.out(6790): 窗口2==>10
05-11 08:41:50.956: INFO/System.out(6790): 窗口2==>8
05-11 08:41:50.986: INFO/System.out(6790): 窗口1==>9
05-11 08:41:50.996: INFO/System.out(6790): 窗口1==>5
05-11 08:41:51.006: INFO/System.out(6790): 窗口1==>4
05-11 08:41:51.018: INFO/System.out(6790): 窗口2==>6
05-11 08:41:51.018: INFO/System.out(6790): 窗口2==>3
05-11 08:41:51.026: INFO/System.out(6790): 窗口2==>2
05-11 08:41:51.036: INFO/System.out(6790): 窗口1==>1
05-11 08:41:51.046: INFO/System.out(6790): 窗口3==>7
分析:
我认为此处3个窗口已经是在卖共同的10张票了,只不过由于没有进行线程同步才造成数据混乱。
线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。
3. 下面继续修改代码,验证我刚得猜测。
public void onClick(View v) {
//实例化线程对象
MyThread myThread = new MyThread();
new Thread(myThread, "窗口1").start();
new Thread(myThread, "窗口2").start();
new Thread(myThread, "窗口3").start();
}
class MyThread extends Thread{
private int tickets = 10;
public void run() {
for(int i = 0; i< 200; i++){
sell();
}
}
public synchronized void sell(){
if(tickets > 0)
{
System.out.println(Thread.currentThread().getName() + "==>" + tickets--);
}
}
}
运行结果:
05-11 08:53:31.986: INFO/System.out(7116): 窗口1==>10
05-11 08:53:32.006: INFO/System.out(7116): 窗口1==>9
05-11 08:53:32.016: INFO/System.out(7116): 窗口1==>8
05-11 08:53:32.066: INFO/System.out(7116): 窗口1==>7
05-11 08:53:32.086: INFO/System.out(7116): 窗口1==>6
05-11 08:53:32.106: INFO/System.out(7116): 窗口1==>5
05-11 08:53:32.106: INFO/System.out(7116): 窗口1==>4
05-11 08:53:32.126: INFO/System.out(7116): 窗口1==>3
05-11 08:53:32.146: INFO/System.out(7116): 窗口1==>2
05-11 08:53:32.146: INFO/System.out(7116): 窗口1==>1
分析:
一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以获得锁,直到第一个线程释放(或返回)锁。这也意味着任何其他线程都不能进入该对象上的synchronized方法或代码块,直到该锁被释放。
释放锁是指持锁线程退出了synchronized同步方法或代码块。
上述代码没有Thread.sleep(10),换句话说线程一一直处于运行状态,没有释放锁,没有给其他线程运行的机会。
4. 根据上述分析,修改代码如下:
public void onClick(View v) {
//实例化线程对象
MyThread myThread = new MyThread();
new Thread(myThread, "窗口1").start();
new Thread(myThread, "窗口2").start();
new Thread(myThread, "窗口3").start();
}
class MyThread extends Thread{
private int tickets = 10;
public void run() {
for(int i = 0; i< 200; i++){
try{
sell();
Thread.sleep(10);
}catch (InterruptedException e) {
System.out.println("我被打断了" + Thread.currentThread().getName());
e.printStackTrace();
}
}
}
public synchronized void sell(){
if(tickets > 0)
{
System.out.println(Thread.currentThread().getName() + "==>" + tickets--);
}
}
}
运行结果:
05-11 09:17:07.496: INFO/System.out(7898): 窗口1==>10
05-11 09:17:07.528: INFO/System.out(7898): 窗口1==>9
05-11 09:17:07.546: INFO/System.out(7898): 窗口1==>8
05-11 09:17:07.577: INFO/System.out(7898): 窗口1==>7
05-11 09:17:07.626: INFO/System.out(7898): 窗口3==>6
05-11 09:17:07.626: INFO/System.out(7898): 窗口2==>5
05-11 09:17:07.636: INFO/System.out(7898): 窗口1==>4
05-11 09:17:07.646: INFO/System.out(7898): 窗口2==>3
05-11 09:17:07.646: INFO/System.out(7898): 窗口1==>2
05-11 09:17:07.656: INFO/System.out(7898): 窗口3==>1
分析:
此次得出的正是我们想要的结果!O(∩_∩)O~
5. 使用实现Runnable接口的方法重新实现上述功能
public void onClick(View v) {
//实例化线程对象
MyThread myThread = new MyThread();
new Thread(myThread, "窗口1").start();
new Thread(myThread, "窗口2").start();
new Thread(myThread, "窗口3").start();
}
class MyThread implements Runnable{
private int tickets = 10;
public void run() {
for(int i = 0; i< 200; i++){
try{
sell();
Thread.sleep(10);
}catch (InterruptedException e) {
System.out.println("我被打断了" + Thread.currentThread().getName());
e.printStackTrace();
}
}
}
public synchronized void sell(){
if(tickets > 0)
{
System.out.println(Thread.currentThread().getName() + "==>" + tickets--);
}
}
关于线程的理解个人推荐一篇非常棒的文章,里面对java线程进行的详细的总结,仔细阅读必有收获!
[url]http://lavasoft.blog.51cto.com/62575/27069/
[/url]
发表评论
-
Android Tween动画之RotateAnimation实现图片不停旋转
2012-11-26 22:38 1097本文主要介绍Android中如何使用rotate实现图片不停旋 ... -
Android实现widget定时更新
2012-11-04 20:20 955在开发Android的widget时,第一个需要解决的问题就是 ... -
来自腾讯、谷歌、百度等名企的精选面试五十题
2012-10-07 23:08 947http://www.apkway.com/thread-90 ... -
Android 中Parcelable的作用
2012-09-24 09:53 889android提供了一种新的类型:Parcel。本类被用作封装 ... -
[Android算法] 【eoeAndroid索引】史上最牛最全android开发知识汇总
2012-09-13 09:33 1140http://www.eoeandroid.com/threa ... -
安卓航班推荐70个具有商业实战性的精品Android源码
2012-08-01 00:00 952http://www.apkway.com/thread-58 ... -
Android测试教程汇总
2012-08-02 14:51 1178http://www.apkway.com/thread-67 ... -
Service 与 Thread 的区别
2012-07-26 00:10 931Service 与 Thread 的区别 很多时候,你可能 ... -
android 使用百度地图画轨迹
2012-07-26 00:08 2665import android.content.Context ... -
android百度地图半径画圆
2012-07-26 00:07 2812Java代码 import android.content ... -
Android下获取开机时间
2012-07-26 00:05 1348我的思路是:程序里注册个广播接收器,接收开机启动的广播,当程序 ... -
android 高仿【优酷】圆盘旋转菜单 的实现
2012-07-26 00:03 1380MyAnimation.java Java代码 pack ... -
android 3D 转盘效果(附源码)
2012-07-25 23:41 1840一个仿3D的转盘效果,有倒影特效,旋转图标还可自动放大缩小。由 ... -
Android 通过手说tts中文语音包实现中文朗读
2012-07-22 17:09 1820Android 通过手说tts中文语音包实现中文朗读 ... -
Android 使用HTTPClient调用Web请求(查询手机号码区域)
2012-07-21 00:33 1283Android通过Apache HttpClient调用网上提 ... -
Android+struts2+JSON方式的手机开发
2012-07-21 00:14 1198http://topmanopensource.iteye.c ... -
android九宫格实现
2012-07-21 00:03 1031android九宫格实现,开始以为很复杂,其实只要知道了如何布 ... -
Android ListView圆角实现
2012-07-20 23:59 1235在android上开发项目,如 ... -
Android 将一个Activity转化为View显示出来
2012-07-19 10:27 2103最近看到好多opengl牛人写了些立方体,卷页之类的华丽的代码 ... -
Android EditText 为空提示 密码隐藏
2012-07-17 23:39 1152EditText为空时提示方法: 1.xml文件中设置,如: ...
相关推荐
#### 标题:Android Thread - **核心概念**:本主题主要探讨在Android开发中如何有效地利用多线程技术来改善用户体验和应用程序性能。 - **背景介绍**:Android应用运行在一个事件驱动的环境中,其中主线程负责...
### Android Thread 学习笔记详解 #### Android单线程模型的核心原则 在深入探讨Android中的线程使用之前,我们首先需要理解其核心的单线程模型原则,这为后续的多线程操作提供了基础框架: 1. **不要阻塞UI线程*...
在Android应用开发中,线程(Thread)的使用是至关重要的,特别是在涉及到用户界面(UI)更新时。Android系统默认的主线程(Main Thread)负责处理UI交互,如果在这个线程中执行耗时操作,会阻塞UI更新,导致应用无...
标题“android-multithreading.rar_android_android Thread”表明此压缩包包含有关Android平台上多线程使用的详细信息,特别是针对Android线程(Thread)的实践应用。 在Android系统中,主线程(UI线程)负责处理...
在Android应用开发中,线程(Thread)和Handler是实现多任务并行处理以及界面更新的关键组件。Android系统是一个单线程模型,主线程(UI线程)负责处理用户交互和绘制界面,而其他工作通常需要在后台线程中执行,以...
在Android开发中,线程(Thread)和异步任务(AsyncTask)是两种常见的机制,用于在后台执行耗时操作,以避免阻塞主线程,提高用户体验。主线程,也称为UI线程,负责处理用户交互和更新界面,因此任何长时间运行的...
System.out.println("Activity-->"+ Thread.currentThread().getName()); } Runnable r = new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { Thread...
android developer->training->sending operations to multiple threads 的例子。demo的例子叫threadSample.zip。这个例子请结合官网文档看,对android多线程处理给出了一个解决方案,写的相当好。
在Android开发中,线程(Thread)是至关重要的一个概念,因为它允许应用程序在后台执行任务,而不会阻塞用户界面。Android系统主要使用两种类型的线程:主线程(UI线程)和工作线程。主线程负责处理用户交互,更新UI...
在Android开发中,线程(Thread)是执行并发任务的基础单元。`Thread` 类是Java语言中的核心组件,同样在Android系统中,我们也可以利用它来实现后台任务处理,提高应用的响应速度和用户体验。本实例是将Android的`...
本文将深入探讨Android中的三种主要线程模式:Handler、Thread以及Looper,并结合源码分析它们的工作原理。 首先,我们来理解一下Android应用的基本运行环境。Android系统默认在主线程(UI线程)中执行所有的用户...
在Android应用开发中,多线程的使用是常见的性能优化手段,特别是在UI更新和网络请求等耗时操作中。本文将深入探讨如何在Android环境中实现两个子线程之间的通信。 首先,理解Android线程模型至关重要。主线程,也...
通过以上讲解,我们可以看到在Android应用中,利用Handler和Thread协同工作,可以高效地处理异步任务,同时确保UI操作的安全性。这个“android demo”旨在帮助开发者理解并实践这种多线程通信的方式。
本篇文章将深入探讨Android Studio中的线程管理,即“Thread”主题。 在Android应用开发中,线程是执行任务的基本单元。由于Android系统的主线程(UI线程)主要负责处理用户界面交互,因此,为了保持UI的流畅性,...
在Android应用开发中,线程的管理至关重要,因为Android系统主要在主线程(UI线程...在`AndroidThread-master`这个项目中,应该包含了各种线程使用示例,你可以通过查看和学习这些代码来加深对Android线程管理的理解。
本篇文章将深入探讨如何在Android中使用`Thread`进行图像的异步下载。 一、基础知识 1. **主线程与工作线程**:Android应用的主要执行流程在主线程中,它负责UI的绘制和事件处理。工作线程,也称为后台线程,用于...
通过在MainActivity中创建...webService_thread是通过Runable和Thread创建的线程,webService_thread2是通过Callable和Future创建的线程。 和此代码配套的文章 http://blog.csdn.net/tch918/article/category/2272975
"Android 5.0 中 hwui 中 RenderThread 工作流程" Android 5.0 中 hwui 中的 RenderThread 工作流程是 Android 系统中一个非常重要的组件,负责渲染和绘制应用程序的界面。在这个过程中,RenderThread plays a ...
《AndroidBook_003_ThreadModel_V2.0.rar》可能是关于“Android线程模型”(Android Thread Model)的教程,讲解了如何在Android平台上有效地处理多线程编程。这包括主线程(UI线程)、工作线程、Handler、Looper和...