色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > Android多線程編程

Android多線程編程 時間:2018-09-25      來源:未知

實現線程的兩種方式

使用繼承的方法

class MyThread extends Thread{

@Override

public void run(){

//處理具體的邏輯

}

}

要啟動這個線程,在主線程中新建一個該實例,調用其start()方法即可。

使用實現Runnable借口的方式

class MyThread implements Runnable{

@Override

public void run(){

//處理具體的邏輯

}

}

開啟現成時,使用:

MyThread myThread = new MyThread();

new Thread(MyThread).start();

匿名類的方法去實現Runnable也是一樣的

new Thread(new Runnalbe(){

@Override

public void run(){

//處理具體邏輯

}

}).start();

異步操作

和很多的GUI庫一樣,Android的UI也是線程不安全的,所以,我們不能在子線程中更新UI元素。

我們需要通過異步的操作通過子線程向主線程通信的方式來將UI更新的操作交給主線程來完成。

Handler和Message結合傳遞的方法

這里,有Message、Handler、MessageQueue和Looper在作用。

1、Message是縣城之間傳遞的消息。

2、Handler是處理者,用于發送和處理消息

3、MessageQueue是消息隊列的意思,存放通過Handler發送的消息。

4、Looper是每個線程中的MessageQueue的管家。​

Handler handler = new Handler(){

public void handleMessage(Message msg){

switch (msg.what){

case UPDATA_TEXT:

txvHello.setText("Nice to meet you!");

break;

default:

break;

}

}

};

8new Thread(new Runnable() {

@Override

public void run() {

Message msg = new Message();

msg.what = UPDATA_TEXT;

handler.sendMessage(msg);

}

}).start();

使用Async Task

Async Task是一個抽象類,我們要使用它,就要先對他進行處理。

3個參數:

1、Params在執行AsyncTask時需要傳入的參數,可用于在后臺服務中使用。

2、Progress如果需要在界面上顯示當前的進度,使用這里的泛型作為進度單位。

3、Result任務執行完畢后,對結果進行返回。​

4個重寫的方法:

1、onPreExecute()

2、DoInBackground(。。。)

3、onProgressUpdate(。。。)

4、onPostExecute(Result)​

public class DownloadTask extendsAsyncTask{

TextView txvDownloading;

ProgressBar progressBar;

@Override

protected void onPreExecute() {

super.onPreExecute();

progressBar.setMax(100);

}

public DownloadTask(TextView txvDownloading, ProgressBar progressBar) {

this.txvDownloading = txvDownloading;

this.progressBar = progressBar;

}

@Override

protected Integer doInBackground(Void... params) {

int count = 0;

for (int i =100; i > 0; i-- ){

count++;

publishProgress(count);

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

return count;

}

@Override

protected void onProgressUpdate(Integer... values) {

int a = values[0];

Log.d("TAG",a+"");

progressBar.setProgress(a);

}

@Override

protected void onPostExecute(Integer integer) {

super.onPostExecute(integer);

if(integer.equals(100)){

txvDownloading.setText("Done");

}else{

txvDownloading.setText("downloading");

}

}

}

在Mainactivity中只需要寫入:

1new DownloadTask(txvShow, prgsDownload).execute();

即可。

服務

什么是服務:服務是Android的四大組件之一,在后臺運行

創建服務

創建一個繼承Service的類,

其中onBind方法是默認重寫的,其他的還有3個重要的方法,onCreate()、onStartCommand()、onDestroy()。​

1、onCreate()方法會在服務創建的時候調用

2、onStartCommand()會在每次服務啟動的時候調用

3、onDestroy()會在服務銷毀的時候調用。

每個服務都必須在AndroidManifest.xml中注冊才能生效。

啟動和關閉服務

通過Intent我們可以來開啟和關閉服務

switch (v.getId()){

case R.id.btn_start:

Intent startTntent = new Intent(this, MyService.class);

startService(startTntent);

break;

case R.id.btn_stop:

Intent stopIntent = new Intent(this, MyService.class);

stopService(stopIntent);

break;

default:

break;

}

onBind方法,綁定服務

private DownloadBinder mBinder = new DownloadBinder();

class DownloadBinder extends Binder{

public void startDownload(){

Log.d("TAG","StartDownload");

}

public int getProgress(){

Log.d("TAG","getProgress executed");

return 0;

}

}

@Nullable

@Override

public IBinder onBind(Intent intent) {

return mBinder;

}

private ServiceConnection connection = newServiceConnection() {

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

downloadBinder = (MyService.DownloadBinder) service;

downloadBinder.startDownload();

downloadBinder.getProgress();

}

@Override

public void onServiceDisconnected(ComponentName name) {

}

};

case R.id.btn_bindstart:

Intent bindIntent = new Intent(this, MyService.class);

bindService(bindIntent,connection,BIND_AUTO_CREATE);

break;

case R.id.btn_bindstop:

unbindService(connection);

服務器的生命周期:

略。

更多的服務---前臺服務

類似于通知的使用方法,在onCreate代碼中構建Notification對象,建立Intent對象,PendingIntent,setLatestEventInfo,接下來是startForeground方法

public void onCreate() {

super.onCreate();

Notification notification = newNotification(R.drawable.ic_launcher,"Notification comes",System.currentTimeMillis());

Intent notificationIntent = new Intent(this, MainActivity.class);

PendingIntent pendingIntent = PendingIntent.getActivity(this,0,notificationIntent,0);

startForeground(1,notification);

}

7. IntentService

為了避免在主線程中出現耗時邏輯,我們需要使用Android的多線程編程的方法,將耗時邏輯放入線程中進行。

@Override

public int onStartCommand(Intent intent, int flags,int startId) {

new Thread(new Runnable() {

@Override

public void run() {

//處理耗時邏輯

}

}).start();

return super.onStartCommand(intent, flags, startId);

}

在耗時邏輯執行完成了之后,如果我們希望服務在處理完這些內容之后就自動關閉,呢么在耗時邏輯的后加上stopSelf()方法是個不錯的選擇。

當然這里要可以使用IntentService類,它可以簡單的創建一個異步的,會自動停止的服務。

public class MyIntentService extends IntentService{

/**

* Creates an IntentService. Invoked by your subclass's constructor.

*

*

*/

public MyIntentService() {

super("MyIntentService");

}

@Override

protected void onHandleIntent(Intent intent) {

for (int a = 10; a > 0; a--){

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

Log.d("TAG", ""+a);

}

}

@Override

public void onDestroy() {

super.onDestroy();

Log.d("TAG", "onDestroy");

}

}

ase R.id.btn_intentservice:

Intent intentService = newIntent(this,MyIntentService.class);

startService(intentService);

break;

上一篇:Java中內部類的幾種表現形式

下一篇:AS(Android Studio)中使用NDK

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 欧美亚洲高清国产 | 中文一区一区三区免费 | 性xxxx搡xxxxx搡欧美 | 大号BBVVBBW高潮 | 日韩免费无码一区二区三区 | 性高朝大尺度少妇大屁股 | 色综合另类小说图片区 | 少妇人妻无码专区视频免费 | 大肉大捧一进一出好爽视频百度 | 国产成人愉拍精品 | 日韩黄色网址 | 亚洲人成网站在小说 | 亚洲综合人成网免费视频 | 久久99精品久久久久久齐齐 | www久久无码天堂mv | 亚洲AV成人片色在线观看吉沢 | 在教室伦流澡到高潮H强圩动漫 | 无码高潮爽到爆的喷水视频 | 五十路熟妇强烈无码 | 黄色草逼视频 | 益日韩欧群交P片内射中文 无码人妻AV免费一区二区三区 | 无码专区国产精品视频 | 亚洲国产长腿丝袜AV天堂 | 久久国产午夜精品理论片34页 | 国产午夜激无码AV毛片不 | 好爽别插了无码视频 | av色综合久久天堂av色综合在 | 亚洲综合另类小说色区一 | 亚洲中文精品久久久久久不卡 | 性xxxxfreexxxxx国产 | 四虎影院最新地址 | 丁香花视频资源在线观看 | 富婆推油偷高潮叫嗷嗷叫 | 精品少妇人妻AV免费久久洗澡 | 18禁黄网站男男禁片免费观看 | 啦啦啦在线观看免费版中文 | 中国一级片在线播放 | 亚洲日韩乱码中文无码蜜桃臀 | 亚洲中文字幕婷婷在线 | 无码做爰视频WWW网站建设 | 内射老妇女BBWXOGOD |