国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android Handler被棄用,那么以后怎么使用Handler,或者類似的功能

這篇具有很好參考價值的文章主要介紹了Android Handler被棄用,那么以后怎么使用Handler,或者類似的功能。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Android API30左右,Android應(yīng)用在使用傳統(tǒng)寫法使用Handler類的時候會顯示刪除線,并提示相關(guān)的方法已經(jīng)被棄用,不建議使用。

Handler handler = new Handler(){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                switch (msg.what){
                    case 1:
                        String content = String.valueOf(msg.obj);
                        textView.setText(content);
                        break;
                }
            }
        };

Android studio中的顯示和建議:

Android Handler被棄用,那么以后怎么使用Handler,或者類似的功能

看下官方API關(guān)于此處的解釋:

Android Handler被棄用,那么以后怎么使用Handler,或者類似的功能

?簡要說就是如果在實例化Handler的時候不提供Looper, 可能導(dǎo)致操作丟失(Handler 沒有預(yù)估到新任務(wù)并已退出)、App崩潰的bug(Handler有時候創(chuàng)建一個線程,但沒有運行的Looper),亦或者race情況下,造成處理錯誤。

所以作者棄用了這部分內(nèi)容。

那以后如何用Handler,或者相關(guān)功能挺好用的,有沒有替代功能呢?

通常,Android 應(yīng)用程序使用主線程來處理 UI 任務(wù)和輸入事件。因此,在此主線程上執(zhí)行任何長時間運行的任務(wù)都可能導(dǎo)致應(yīng)用程序凍結(jié)和無響應(yīng)。 該主線程將 UI 事件或消息收集到隊列 ( MessageQueue) 中,然后使用Looper類的實例對其進行處理。默認情況下,主線程已經(jīng)準備好了Looper 。

但意外總是有的,那應(yīng)該怎么處理?

1。仍然用Handler

棄用的不是Handler, 而上Handler的兩個構(gòu)造方法:

  • Handler()
  • Handler(Handler.Callback)

上面兩個構(gòu)造方法在某些情況下會發(fā)生棄用理由里面的bug,但是,并不是整個Handler類被棄用了,還可以用其他的構(gòu)造方法來構(gòu)造Handler對象。

安卓建議采用如下方法來替代:

  • 使用?Executor
  • 明確指定Looper 。
  • 使用Looper.getMainLooper()定位并使用主線程的Looper
  • 如果又想在其他線程,又想要不出bug,請使用new Handler(Looper.myLooper(), callback) 或者?new Handler(Looper.myLooper())兩個構(gòu)造方法。
public Handler(@NonNull Looper looper) {
        throw new RuntimeException("Stub!");
    }

public Handler(@NonNull Looper looper, @Nullable Handler.Callback callback) {
        throw new RuntimeException("Stub!");
    }

2。仍然使用Handler的方法

2.1 在主線程內(nèi)運行。

val mainHandler = Handler(Looper.getMainLooper()).post {
            System.out.println("Thread : " + Thread.currentThread().name)
        }
/* prints 
I/System.out: Thread : main */

2.2 在當前線程運行Handler

val mainHandler = Handler(Looper.myLooper()).post {
            System.out.println("Thread : " + Thread.currentThread().name)
        }

2.3 明確指出使用某線程的Looper

val handlerThread = HandlerThread("HandlerThread");
handlerThread.start();
val backgroundHandler = Handler(handlerThread.looper).post {
    println("Thread : " + Thread.currentThread().name)
    handlerThread.quitSafely(); 
}
/* prints
I/System.out: Thread : HandlerThread */

2.4 從主線程內(nèi)新建一個線程handler線程

// Create a handler to execute in the background thread
val backgroundHandler = Handler(handlerThread.getLooper(), Handler.Callback() {
        // Your code logic goes here.
        
        Handler(Looper.getMainLooper()).post {
            System.out.println("Thread : " + Thread.currentThread().name)
            // update UI
        }
        
        return true
    }
})

3。使用?Executor

3.1 在主線程內(nèi)運行 Executor

val mainExecutor: Executor = ContextCompat.getMainExecutor(this)
        // Execute a task in the main thread
        mainExecutor.execute(Runnable {
            // You code logic goes here.
        })

3.2 新建后臺線程運行 Executor文章來源地址http://www.zghlxwxcb.cn/news/detail-419825.html

val backgroundExecutor: ScheduledExecutorService = Executors.newSingleThreadScheduledExecutor()
// Execute a task in the background thread.
backgroundExecutor.execute {
    // background code
    backgroundExecutor.shutdown();
}
// Execute a task in the background thread after 5 seconds.
backgroundExecutor.schedule({
    // background code
    backgroundExecutor.shutdown();
}, 5, TimeUnit.SECONDS)

到了這里,關(guān)于Android Handler被棄用,那么以后怎么使用Handler,或者類似的功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • vscode | linux | c++ intelliense 被棄用解決方案

    vscode | linux | c++ intelliense 被棄用解決方案

    每日一句,vscode用的爽是爽,主要是可配置太強了。如果也很會研究,可以直接去咸魚接單了 廢話少說,直接整。 用著用著說是c++ intelliense被棄用,很多輔助功能無法使用,像查看定義、查看引用、函數(shù)跳轉(zhuǎn)、智能提示…… 歸根結(jié)底,還是太菜了,但真的很需要這些輔助啊

    2024年02月12日
    瀏覽(79)
  • Resthighlevelclient被棄用后,ES 8.x 最新用法 java api

    一、ES 8.x 整合springBoot 1、導(dǎo)入依賴 2、創(chuàng)建 ElasticsearchClient 二、ES java api 1、搜索 2、單個插入(更新)文檔 3、批量插入(更新)文檔

    2024年02月14日
    瀏覽(21)
  • Python錯題集-7:DeprecationWarning: Conversion of an array with ndim(被棄用警告)

    Python錯題集-7:DeprecationWarning: Conversion of an array with ndim(被棄用警告)

    DeprecationWarning: Conversion of an array with ndim 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) ? X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn), size=1) DeprecationWarning: Conversion of an array with ndim ?是一個警告,通常出

    2024年04月09日
    瀏覽(33)
  • iOS中獲取MCC和MNC的方法及iOS 16中CTCarrier被棄用的替代方案

    一、使用公共API獲取MCC和MNC 在iOS中,我們可以使用CoreTelephony框架來獲取用戶的移動國家代碼(MCC)和移動網(wǎng)絡(luò)代碼(MNC)。具體操作步驟如下: 在Xcode項目中,點擊項目目標,進入“General”選項卡,在“Frameworks, Libraries, and Embedded Content”下點擊“+”按鈕,搜索并添加 Cor

    2024年02月11日
    瀏覽(84)
  • Elasticsearch RestHighLevelClient 已標記為被棄用 它的替代方案 Elasticsearch Java API Client 的基礎(chǔ)教程及遷移方案

    在Elasticsearch7.15版本之后,Elasticsearch官方將它的高級客戶端 RestHighLevelClient 標記為棄用狀態(tài)。同時推出了全新的Java API客戶端 Elasticsearch Java API Client ,該客戶端也將在Elasticsearch8.0及以后版本中成為官方推薦使用的客戶端。 Elasticsearch Java API Client 支持除 Vector tile search API 和

    2024年01月16日
    瀏覽(21)
  • Elasticsearch8.x版本中RestHighLevelClient被棄用,新版本中全新的Java客戶端Elasticsearch Java API Client中常用API練習

    在Es7.15版本之后,es官方將它的高級客戶端RestHighLevelClient標記為棄用狀態(tài)。同時推出了全新的java API客戶端Elasticsearch Java API Client,該客戶端也將在Elasticsearch8.0及以后版本中成為官方推薦使用的客戶端。 Elasticsearch Java API Client支持除Vector title search API和Find structure API之外的所有

    2023年04月08日
    瀏覽(24)
  • 【Android】怎么使用一個ViewModel用在多個Activity或者Fragment中

    項目需求 在多個Activity或者Fragment中使用同一個ViewModel 需求實現(xiàn) 1.使用ActivityScope或FragmentScope 想在一個Activity或Fragment中共享ViewModel實例,可以使用ActivityScope或FragmentScope。這兩種范圍會根據(jù)它們所綁定的Activity或Fragment自動管理ViewModel實例的生命周期。 例如,創(chuàng)建一個繼承自

    2024年02月15日
    瀏覽(18)
  • Android中正確使用Handler的姿勢

    在Android中,Handler是一種用于在不同線程之間傳遞消息和任務(wù)的機制。以下是在Android中正確使用Handler的一些姿勢: 1. 在主線程中創(chuàng)建Handler對象 在Android中,只有主線程(也稱為UI線程)可以更新UI。因此,如果您需要在后臺線程中執(zhí)行某些任務(wù)并更新UI,則需要使用Handler將任

    2024年02月11日
    瀏覽(21)
  • 適配器模式那么強大,該怎么使用呢?

    適配器模式是一種常用的設(shè)計模式,它可以將兩個不兼容的接口進行轉(zhuǎn)換,從而使它們之間可以進行交互。在業(yè)務(wù)開發(fā)中,我們經(jīng)常需要將不同的系統(tǒng)或服務(wù)進行整合,而這些系統(tǒng)或服務(wù)往往有著不同的接口和數(shù)據(jù)格式。適配器模式提供了一種解決方案,可以幫助我們輕松地

    2024年02月08日
    瀏覽(22)
  • 【flutter】使用permission_handler配置android和 iOS的權(quán)限

    flutter在pub.flutter-io.cn插件庫中有很多的關(guān)于權(quán)限配置的插件,但是就我個人而言,比較推薦使用permission_handler這個插件。當我們打開permission_handler時候,往往新手小白會因為它的官網(wǎng)文檔而弄的一頭霧水,權(quán)限配置往往涉及到android和ios兩個方向的相關(guān)知識,有可能大多數(shù)人就

    2024年02月12日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包