• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 安卓學習筆記——服務(Service)

    標簽: 學習經驗  java  安卓  android  移動開發  android studio

    安卓實驗(Service)

    在Android Studio創建計時服務,并使用兩個按鈕進行控制

    1. 創建兩個按鈕控件

    在activity_main.xml中添加如下代碼新建兩個按鈕控件,也可在Design窗口中拖動控件進行添加

    <Button
            android:id="@+id/start_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="300dp"
            android:text="@string/start_button"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <Button
            android:id="@+id/stop_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="350dp"
            android:text="@string/stop_button"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    

    開始計時和停止計時按鈕

    2. 創建用于計時的服務(Service)

    新建java文件TimerService.java,用于實現計時服務類。在文件中新建TimerService類并重寫onCreate()、onBind()、onStartCommand()、onDestroy()。
    我們在onStartCommand()方法中實現后臺計時功能,并在控制臺進行輸出,為了防止Service卡死Activity導致界面無法點擊,我們需要在該方法中創建一個線程來完成計時。返回START_STICKY保證服務在后臺運行

    public int onStartCommand(Intent intent, int flags, int startId) {
            Log.v("TimerService","onStartCommand");
            new Thread(new Runnable() {
                @RequiresApi(api = Build.VERSION_CODES.N)
                @Override
                public void run(){
                    while(!threadDisable){
                        Log.v("TimerService","Timer is " + timer);
                        timer++;
                        try{
                            Thread.sleep(1000);
                        }catch (InterruptedException e){
                        }
                    }
                }
            }).start();
    
            return START_STICKY;
        }
    

    TimerService.java完整代碼

    import android.app.Service;
    import android.content.ComponentName;
    import android.os.Build;
    import android.os.IBinder;
    import android.content.Intent;
    import android.util.Log;
    
    import androidx.annotation.RequiresApi;
    
    public class TimerService extends Service {
        private boolean threadDisable;
        private int timer;
        @Override
        public void onCreate() {
            super.onCreate();
            Log.v("TimerService","oncreat");
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.v("TimerService","onStartCommand");
            new Thread(new Runnable() {
                @RequiresApi(api = Build.VERSION_CODES.N)
                @Override
                public void run(){
                    while(!threadDisable){
                        Log.v("TimerService","Timer is " + timer);
                        timer++;
                        try{
                            Thread.sleep(1000);
                        }catch (InterruptedException e){
                        }
                    }
                }
            }).start();
    
            return START_STICKY;
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            this.threadDisable = true;
            Log.v("TimerService","onDestroy");
        }
    }
    
    

    3. 注冊TimerService服務

    創建完TimerServer服務類后需要在AndroidMainfest.xml中注冊才能使用
    在AndroidMainfest.xml中添加

    <service android:name=".TimerService"/>
    

    4. 按鈕功能實現

    在MainActivity中實現按鈕的功能,創建Intent對象,使用Intent對象來控制服務的開啟和關閉。

    實現代碼

            Button start_button = findViewById(R.id.start_button);
            Button stop_button = findViewById(R.id.stop_button);
    
            start_button.setOnClickListener(new View.OnClickListener(){
                public void onClick(View view){
                    final Intent intent = new Intent(MainActivity.this, TimerService.class);
                    startService(intent);
                }
            });
    
            stop_button.setOnClickListener(new View.OnClickListener(){
                public void onClick(View view){
                    final Intent intent = new Intent(MainActivity.this, TimerService.class);
                    stopService(intent);
                }
            });
    

    5. 進行調試運行

    在debug下運行app,點擊開始計時按鈕后在控制臺可查看當前計時時間,點擊停止計時可將服務停止,再次點擊開始計時會重新進行計時。
    調試運行結果

    版權聲明:本文為SpacePioneer原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/SpacePioneer/article/details/108921238

    智能推薦

    安卓學習筆記----淺析安卓生命周期

    1. 簡述 安卓的生命周期有六個,分別為:onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy(),每一個Activity都有這些生命周期,通過這些生命周期,Activity在不存在,停止,暫停和運行之間轉換,如下圖: 2. 通過打印日志信息更深了解生命周期 如果對安卓Logcat工具或是日志打印不了解,請戳此鏈接 用到...

    安卓學習筆記13:安卓觸摸事件

    文章目錄 零、學習目標 一、安卓觸摸事件 1、觸摸分類 2、觸摸動作 3、觸摸監聽器 4、觸摸方法 5、觸點個數與坐標 二、安卓單點觸摸 三、教學案例——通過觸摸移動米老鼠 (一)運行效果 (二)涉及知識點 (三)實現步驟 1、創建安卓應用【MoveMickeyByTouch】 2、準備背景圖片與米老鼠圖片,拷貝到drawable目錄里 3、布局資源文件activity_m...

    安卓學習筆記12:安卓按鍵事件

    文章目錄 零、學習目標 一、安卓界面事件 (一)安卓常用事件 1、單擊事件 2、焦點事件 3、按鍵事件 4、觸碰事件 (二)安卓事件處理方式 1、基于回調的事件處理機制 2、基于監聽的事件處理機制 二、教學案例——通過按鍵移動米老鼠 (一)運行效果 (二)涉及知識點 (三)實現步驟 1、創建安卓應用【MoveMickeyByKey】 2、準備背景圖片與米老鼠圖片,拷貝到dr...

    安卓學習筆記——SQLite學習

    SQLite簡介: 開源關系型數據庫,運算速度快,占用資源少,在內存上只有幾百k的存儲空間,非常適用于移動端。 SQLite特點 占用空間小 運行高效 可移植性好 支持標準SQL語法 支持ACID事務 零配置:無需安裝和網絡管理配置 支持多種開發語言,C, PHP, Perl, Java, C#,Python SQLite沒有服務器進程,它通過文件保存數據,該文件是跨平臺的,可以放在其他平臺中使用...

    [Android]【安卓】Service詳解

    [Android]【安卓】Service詳解 本篇博客已收錄到我的安卓開發小結中——點擊【安卓開發小結】 參考資料:《Android總結篇系列:Android Service》 、《第一行代碼》 《Android總結篇系列:Android Service》   Service通常總是稱之為“后臺服務”,其中“后臺”一詞是相對于...

    猜你喜歡

    安卓學習之后臺服務

    安卓多線程 先從線程開始學起 線程的基本用法 用Thread 跟java的用法一樣,比如說,定義一個線程只需要新建一個類繼承自Thread,然后重寫父類的run()方法,并在里面編寫耗時邏輯即可。 啟動就更簡單了,只需要new出線程的實例,然后調用它的start()方法 用Runnable接口 使用這種寫法,那么啟動線程的方法就會改變 可以看到,Thread構造函數接收了Runnable參數,而我...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡