安卓學習筆記——服務(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,點擊開始計時按鈕后在控制臺可查看當前計時時間,點擊停止計時可將服務停止,再次點擊開始計時會重新進行計時。
智能推薦
安卓學習筆記----淺析安卓生命周期
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參數,而我...
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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...