Android開發從0開始(服務)

Android后臺運行的解決方案,不需要交互,長期運行。

服務基礎框架

public class MyService extends Service {

public MyService() { ??

}

????@Override

public IBinder onBind(Intent intent) {

????//activity與service交互(需要繼承)

????????// TODO: Return the communication channel to the service.

????????throw new UnsupportedOperationException("Not yet implemented");

????}

????public void onCreate(){

????????//創建服務時定義

????????super.onCreate(); ??}

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

????{

????????//啟動服務時調用

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

????}

????public void onDestroy(){

????????//銷毀服務時調用

????????super.onDestroy();

} ??}

Android多線程

方法一:

①繼承Thread,重寫run()方法

Class MyThread extends Thread{

Public void run( ){ // 處理具體的邏輯}

}

②啟動線程,new ?MyThread( ).start( );

方法二: ??????????????????????????

①使用Runable 接口定義線程

Class MyThread implements Runnable{

Public void run( ) {// 處理具體的邏輯 }

}

②啟動線程,

MyThread myThread = new MyYhread( );

New Thread(my Thread ).start( );

匿名類簡寫:

在子線程中更新UI

??如果直接在子線程中修改UI會導致系統崩潰,因為UI線程是不安全的。所以采用異步消息處理機制。示例:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

????public ?static final int UPDATE_TEXT=1;

????private TextView text;

????private Handler handler = new Handler(){

??????public void ?handleMessage(Message msg)

??????{

??????????switch (msg.what){

??????????????case UPDATE_TEXT:

??????????????????//UI修改部分

??????????????????text.setText("NICE TO MEET YOU");

??????????????????break;

??????????????default:

??????????????????break; ????}???????}????????};

????@Override

????protected void onCreate(Bundle savedInstanceState) {

????????super.onCreate(savedInstanceState);

????????setContentView(R.layout.activity_main);

????????text = (TextView) findViewById(R.id.text);

????????Button changeText= (Button) findViewById(R.id.change_text);

????????changeText.setOnClickListener(this);

????}

????@Override

????public void onClick(View v) {

????????if (v.getId() == R.id.change_text) {

????????????new Thread(new Runnable() {

????????????????@Override

????????????????public void run() {

????????????????????Message message = new Message();

????????????????????message.what = UPDATE_TEXT;

????????????????????handler.sendMessage(message);

????????????????}

????????????}).start();

????????}

????}

}

異步消息處理機制:主要由4個部分組成:Message、Handler、MessageQueue和Looper。

Message是在線程之間傳遞的消息,它可以在內部攜帶少量的信息,用于在不同線程之間交

換數據。上一小節中我們使用到了Message的what字段,除此之外還可以使用arg1和arg2字段來攜帶一些整型數據,使用obj字段攜帶一個 object對象。

Handler顧名思義也就是處理者的意思,它主要是用于發送和處理消息的。發送消息一般是

使用Handler 的sendMessage()方法, 而發出的消息經過一- 系列地輾轉處理后,最終會傳遞到Handler的handleMessage()方法中。

MessageQueue是消息隊列的意思,它主要用于存放所有通過Handler發送的消息。這部分消息會一直存在于消息隊列中,等待被處理。每個線程中只會有一個MessageQueue對象。

Looper是每個線程中的MessageQueue的管家,調用Looper的loop()方法后,就會進入到

一個無限循環當中,然后每當發現MessageQueue中存在一條消息,就會將它取出,并傳遞到Handler的handleMessage()方法中。每個線程中也只會有一個Looper對象。

異步消息封裝工具AsyncTask:

?AsyncTask抽象類,需要子類繼承,一共三個泛型

簡單定義AsyncTask:

Class DownloadTask extends AsynTask<Void, Integer, Boolean >{....}

這里我們把AsyncTask的第-一個泛 型參數指定為Void,表示在執行AsyncTask的時候不需

要傳人參數給后臺任務。第二個泛型參數指定為Integer,表示使用整型數據來作為進度顯示單位。第三個泛型參數指定為Boolean, 則表示使用布爾型數據來反饋執行結果。

經常需要重寫onPreExecute( ),doInBackground(params.. ),

?onProgressUpdate(params.. ), ?onPostExecute(Result)

前臺服務:會一直有一個正在運行的圖標在系統狀態欄顯示。

IntentService類封裝了自動開啟線程調用stopSelf( )方法

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166705.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166705.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166705.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全網最全圖解Kafka適用場景

消息系統 消息系統被用于各種場景&#xff0c;如解耦數據生產者&#xff0c;緩存未處理的消息。Kafka 可作為傳統的消息系統的替代者&#xff0c;與傳統消息系統相比&#xff0c;kafka有更好的吞吐量、更好的可用性&#xff0c;這有利于處理大規模的消息。 根據經驗&#xff…

淘寶、1688代購系統;微信代購小程序,代購系統源代碼,PHP前端源碼演示

電商價格數據監測接口、品牌商品控價接口、商品數據分析接口和比價搜索API接口都是非常實用的電商接口服務&#xff0c;下面我將為您詳細介紹這些接口的用途和使用方式。 1.電商價格數據監測接口&#xff08;注冊獲取請求調用key&#xff09; taobao.item_get-獲得淘寶商品詳…

ubuntu環境刪除qtcreator方法

文章目錄 方法1方法2方法3參考不同的安裝方法,對應不同的刪除方法 方法1 apt-get或者dpkg 方法2 QtCreatorUninstaller 方法3 MaintenanceTool

2023亞太杯數學建模C題思路分析 - 我國新能源電動汽車的發展趨勢

1 賽題 問題C 我國新能源電動汽車的發展趨勢 新能源汽車是指以先進技術原理、新技術、新結構的非常規汽車燃料為動力來源( 非常規汽車燃料指汽油、柴油以外的燃料&#xff09;&#xff0c;將先進技術進行汽車動力控制和驅動相結 合的汽車。新能源汽車主要包括四種類型&#x…

js中forEach、filter、map的區別

forEach、filter、map都可以遍歷數組&#xff0c;那么三者有什么區別&#xff1f; 區別&#xff1a; forEach遍歷數組全部元素&#xff0c;利用回調函數對數組進行操作&#xff0c;不會返回新的數組,return只用于控制循環是否跳出當前循環; filter返回一個新的數組&#xff0…

全新Self-RAG框架亮相,自適應檢索增強助力超越ChatGPT與Llama2,提升事實性與引用準確性

全新Self-RAG框架亮相,自適應檢索增強助力超越ChatGPT與Llama2,提升事實性與引用準確性 1. 基本思想 大型語言模型(LLMs)具有出色的能力,但由于完全依賴其內部的參數化知識,它們經常產生包含事實錯誤的回答,尤其在長尾知識中。 為了解決這一問題,之前的研究人員提出了…

c語言編程題經典100例——(16~20例)

1&#xff0c;將一個字符串轉換為整數 在C語言中&#xff0c;可以使用庫函數 atoi() 將字符串轉換為整數。 atoi() 函數接受一個字符串作為參數&#xff0c;并返回其對應的整數。 以下是一個示例代碼&#xff0c;演示如何使用 atoi() 函數將字符串轉換為整數&#xff1a; #i…

Linux下安裝python3步驟:

1.下載Python3源碼 你需要從Python官網下載Python3的源碼包。本文以Python 3.9.9為例。你可以使用wget命令來下載源碼包到你的Linux主目錄中: wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz2.編譯和安裝Python3 下載好源碼包后&#xff0c;你需要解壓它&…

【LeetCode:2824. 統計和小于目標的下標對數目 | 模擬+二分】

&#x1f680; 算法題 &#x1f680; &#x1f332; 算法刷題專欄 | 面試必備算法 | 面試高頻算法 &#x1f340; &#x1f332; 越難的東西,越要努力堅持&#xff0c;因為它具有很高的價值&#xff0c;算法就是這樣? &#x1f332; 作者簡介&#xff1a;碩風和煒&#xff0c;…

ubuntu22.04中ros2 安裝rosbridge

ros2 啟動rosbridge&#xff1a; 要啟動ROS2中的rosbridge&#xff0c;需要先安裝ROS2的rosbridge_suite軟件包。使用以下命令安裝&#xff1a; 更新過可忽略 sudo apt-get update安裝命令 sudo apt-get install ros--rosbridge-suite 注意&#xff1a; 將替換為正在使用的R…

深度學習圖像風格遷移 - opencv python 計算機競賽

文章目錄 0 前言1 VGG網絡2 風格遷移3 內容損失4 風格損失5 主代碼實現6 遷移模型實現7 效果展示8 最后 0 前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度學習圖像風格遷移 - opencv python 該項目較為新穎&#xff0c;適合作為競賽課題…

uniapp高德、百度、騰訊地圖配置 SHA1

uniapp高德、百度、騰訊地圖配置 SHA1 當winr彈出cmd彈框后輸入 keytool -list -v -keystore debug.keystore 顯示keytool 不是內部或外部命令&#xff0c;也不是可運行的程序或批處理文件。可以先看看是否有下載jdk且配置了環境變量&#xff0c;具體操作如下&#xff1a;keyto…

please upgrade numpy version to >=1.20

升級 upgrade numpy_升級numpy-CSDN博客 pip install numpy --upgrade 沒有pip conda install numpy --upgrade 會報錯 conda list numpy來查看numpy版本 似乎這個numpy要看numpy-base這個 似乎沒有pip

【開源】基于JAVA的計算機機房作業管理系統

項目編號&#xff1a; S 017 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S017&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S017&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 登錄注冊模塊2.2 課程管理模塊2.3 課…

K8S如何部署ActiveMQ(單機、集群)

前言 大家好&#xff0c;在今天的討論中&#xff0c;我們將深入研究如何將ActiveMQ遷移到云端&#xff0c;以便更好地利用Kubernetes的容器調度和資源管理能力&#xff0c;確保ActiveMQ的高可用性和可擴展性。 ActiveMQ是Apache開源組織推出的一款開源的、完全支持JMS1.1和J2…

申請二級域名

1、登錄騰訊云 騰訊云 產業智變云啟未來 - 騰訊 (tencent.com) 2、進入我的域名&#xff0c;點擊主域名 3、點擊前往DNSPod管理 4、點擊我的域名&#xff0c;然后點擊主域名 5、點擊添加記錄&#xff0c;進行添加二級域名信息 6、添加相應二級域名信息 7、添加后需要進行驗證…

系列一、Spring Framework

一、Spring Framework 1.1、概述 Spring是一個輕量級的開源的JavaEE框架&#xff1b;Spring可以解決企業應用開發的復雜性&#xff1b;Spring有兩個核心部分&#xff1a;IOC和AOP ① IOC&#xff1a;控制反轉&#xff0c;把創建對象的過程交給Spring進行管理&#xff1b; ② …

PSP - 從頭搭建 抗原類別 (GPCR) 的 蛋白質結構預測 項目流程

歡迎關注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134595717 GPCRs&#xff08;G Protein-Coupled Receptors&#xff0c;G蛋白偶聯受體&#xff09;&#xff0c;又稱為7次跨膜受體&#xff0c;是細…

界面組件Telerik UI for WinForms中文教程 - 創建明暗模式的桌面應用

黑暗模式現在在很多應用程序中都挺常見的&#xff0c;但如何在桌面應用程序中實現它呢&#xff1f;這很簡單&#xff0c;本文將為大家介紹如何使用一個類和命令行調用來實現&#xff01; Telerik UI for WinForms擁有適用Windows Forms的110多個令人驚嘆的UI控件。所有的UI fo…

Appium 全新 2.0 全新跨平臺生態,版本特性搶鮮體驗!

關于Appium V2 Appium V2 beta版本在2021年發布&#xff0c;從2022年1月1號開始&#xff0c;Appium核心團隊不會再維護Appium 1.x版本了&#xff0c;所有近期官方發布的平臺驅動&#xff08;如Android平臺的UIAutomator&#xff0c;IOS平臺的XCUITest&#xff09;不再兼容Appi…