編輯:關於Android編程
本文主要介紹Android的Handler的使用方法。Handler可以發送Messsage和Runnable對象到與其相關聯的線程的消息隊列。每個Handler對象與創建它的線程相關聯,並且每個Handler對象只能與一個線程相關聯。
Handler一般有兩種用途:1)執行計劃任務,你可以再預定的實現執行某些任務,可以模擬定時器。2)線程間通信。在Android的應用啟動時,會創建一個主線程,主線程會創建一個消息隊列來處理各種消息。當你創建子線程時,你可以再你的子線程中拿到父線程中創建的Handler對象,就可以通過該對象向父線程的消息隊列發送消息了
MainActivity.java
[java]
package com.example.thread;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
// 消息處理者
private Handler handler;
private static final int TURNTEXT = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
System.out.println("主線程----" + Thread.currentThread().getName());
tv = new TextView(this);
tv.setText("你好");
setContentView(tv);
// 處理者
handler = new Handler() {
// handlerMessage方法處理handler發送的消息
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// msg.what操作獲取發送什麼消息,根據消息的標識,進行不同處理方式
int what = msg.what;
if (what == TURNTEXT) {
tv.setText(System.currentTimeMillis() + "");
}
}
};
try {
//主線程 阻塞 6s 大於
Thread.sleep(10000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//run方法執行完畢 線程就死掉
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
System.out.println("子線程----"
+ Thread.currentThread().getName());
Thread.sleep(1000);
// 發送消息 what標識
handler.sendEmptyMessage(TURNTEXT);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
package com.example.thread;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
// 消息處理者
private Handler handler;
private static final int TURNTEXT = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
System.out.println("主線程----" + Thread.currentThread().getName());
tv = new TextView(this);
tv.setText("你好");
setContentView(tv);
// 處理者
handler = new Handler() {
// handlerMessage方法處理handler發送的消息
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// msg.what操作獲取發送什麼消息,根據消息的標識,進行不同處理方式
int what = msg.what;
if (what == TURNTEXT) {
tv.setText(System.currentTimeMillis() + "");
}
}
};
try {
//主線程 阻塞 6s 大於
Thread.sleep(10000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//run方法執行完畢 線程就死掉
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
System.out.println("子線程----"
+ Thread.currentThread().getName());
Thread.sleep(1000);
// 發送消息 what標識
handler.sendEmptyMessage(TURNTEXT);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
為了幫助一些剛接觸AndroidStudio的童鞋,在這裡我把自己琢磨出來的一點經驗分享給大家!Ecplise項目變為AS項目有兩種方式,一種只不改變原有的項目結構,只是
本文實例講述了Android編程使WebView支持HTML5 Video全屏播放的解決方法。分享給大家供大家參考,具體如下:1)需要在AndroidManifest.x
先看一張效果圖,要做什麼就比較清晰了:實現思路:1.首先自定義一個View包括頭部和列表2.給自定義View添加注解,也就是默認使用自定義的BehaviorLayoutB
1、為什麼要有AIDL? 無論學什麼東西,最先得弄明白為什麼要有這個東西,不要說存在即是合理,存在肯定合理,但是你還是沒有明白。對於AIDL有一些人的淺顯概念就是,AID