亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Android自定義短信倒計時view流程分析

瀏覽:64日期:2022-09-25 10:55:16

倒計時實現有三種方式 而這個自定義view是通過handler實現的。為了保證activity銷毀的同時倒計時線程依然進行同時重新創建銷毀又不會導致內存泄漏,我使用了handler的弱引用將handler和runnable設置成靜態,同時通過一系列變量來銷毀關閉線程保存狀態,話不多說先看效果圖:

Android自定義短信倒計時view流程分析

下面看源碼:

import android.content.Context;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import androidx.annotation.NonNull;import com.juexing.payassistant.activity.login.RegisterActivity;import java.lang.ref.WeakReference;//待優化為了保存倒計時狀態線程延遲一秒關閉所有的子線程//qq也是如此public class CountDownTimeView extends androidx.appcompat.widget.AppCompatButton { private static volatile int i=60; //用來保存倒計時時間的中轉變量 private static volatile int j=0; private static TimeHandler handler;//每次啟動活動判斷i是否為0來讀取倒計時時間 public static int getI() { return i; } //RegisterActivity是調用該控件的活動需要在oncreate中將對象傳入public void setActivity(RegisterActivity activity){ handler=new TimeHandler(activity);} public static void setI(int i) { CountDownTimeView.i = i; } //防止多次重復點擊發送設置的變量 private static volatile boolean send=true; private class TimeHandler extends Handler { WeakReference<RegisterActivity> timeActivityWeakReference; public TimeHandler(RegisterActivity registerActivity){ this.timeActivityWeakReference = new WeakReference<>(registerActivity); } @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); RegisterActivity activity=timeActivityWeakReference.get();//獲取活動 switch (msg.what){case 1: if(i>0){ activity.getmessage. setText(i+'s'); }else { } break;case 2: activity.getmessage. setText('重新獲取'); break;case 3: i=j-1; j=0; send=false; handler.postDelayed(runnable,1000); } } }; public CountDownTimeView(Context context) { super(context); } public CountDownTimeView(Context context, AttributeSet attrs) { super(context, attrs); }//網絡請求短信成功后調用 public void onStart(CountDownTimeView view){ if(send){ if(i==0){ i=60; } handler.postDelayed(runnable,1000); view.setText(i+'s'); send=false; }else { //為了顯示不突兀自動減去一秒 view.setText(i-1+'s'); j=i; //將i設置為0是將所有線程運行完畢關閉釋放內存 i=0; handler.removeCallbacksAndMessages(null); //因為線程調度隨機性所以要延遲一秒發送保證子線程關閉 Message message=Message.obtain(); message.what=3; handler.sendMessageDelayed(message,1000);// i=j; } } //設置成靜態保證唯一性 public static Runnable runnable=new Runnable() { @Override public void run() { if(i>0){i--;Message message=new Message();message.what=1;handler.handleMessage(message);handler.postDelayed(runnable,1000); }else {if(j!=0){}else { send=true; Message message=new Message(); message.what=2; handler.handleMessage(message);} } } };}

在activity的oncreate中需要將activity實例對象傳入,并進行判斷:

getmessage.setActivity(this); if(getmessage.getI()<60){ if(getmessage.getI()>0){getmessage.onStart(getmessage); }else {getmessage.setText('重新獲取'); } } }

```getmessage是自定義view的實例對象。

如要源碼可以到我的git上獲取:

[https://github.com/heybixby/CountDownTimerView```](https://github.com/heybixby/CountDownTimerView)

總結

到此這篇關于Android自定義短信倒計時view流程分析的文章就介紹到這了,更多相關android 短信倒計時view內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
主站蜘蛛池模板: 亚洲综合无码一区二区 | 亚洲福利在线观看 | 快射视频在线观看 | 嫩操影院| 亚洲精品福利一区二区三区 | 日韩欧美一级 | 欧美性猛交xxxx免费看蜜桃 | 岛国毛片一级一级特级毛片 | 在线免费看片网站 | 特级毛片永久久免费观看 | 中国精品视频一区二区三区 | 中文一区二区在线观看 | 欧美一级做一级爱a做片性 欧美一级做一级做片性十三 | 日本一级特黄特色大片免费视频 | 日毛片| 国产乱弄视频在线观看 | 国产一线视频在线观看高清 | 日本特黄的免费大片视频 | 欧美性黑吊xxx | 亚洲另类欧美日韩 | 99热这里只有精品88 | 国内真实实拍伦视频在线观看 | 欧美在线观看成人高清视频 | 亚洲精品一区二区三区第四页 | 精品国产欧美一区二区三区成人 | 亚洲精品久久久久综合91 | 精品一区二区三区在线成人 | 狠狠综合欧美综合欧美色 | 欧美毛片性视频区 | 中文日产国产精品久久 | 国产a精品 | 九九这里只有精品视频 | 91福利国产在线观看一区二区 | 日韩精品一区二区三区免费视频 | 亚洲成人美女 | 91视频免费观看 | 亚洲欧美另类国产综合 | 那一个欧美一级毛片 | 小明福利| 高h喷水荡肉爽文各种场合 高h辣肉各种姿势爽文bl | 色的视频在线观看免费播放 |