當前位置:首頁 » 安卓系統 » android後台伺服器

android後台伺服器

發布時間: 2023-04-02 19:43:57

⑴ Android使用JobService實現後台服務

前言
在Android經常要實現定時服務,定時某個時刻推送消息或者更新數據。比如需要在夜晚8:00-10:00之間,推送一條消息、彈窗、或者其他操作。
一般我們可能是開啟Service,在Service中使用AlarmManager,setRepeating定時請求,但是從API19起,並不能保證時效的准確,在5.0以後,Google推出了一個JobService,用來執行一些並非即卜桐時執行空宏的後台進程。

使用
在JobService中有兩個抽象方法onStartJob(JobParameters)和onStopJob(JobParameters)。onStartJob在JobService被調度到的時候會執行,我們只需要繼承JobService然後重寫onStartJob方法,並在裡面執行我們的後台任務就可以了。

This service executes each incoming job on a Handler running on your application's
main thread. This means that you must offload your execution logic to another
thread/handler/AsyncTask of your choosing. Not doing so will result in blocking any
future callbacks from the JobManager - specifically onStopJob(android.app.job.JobParameters), which is meant to inform you that the
scheling requirements are no longer being met.
即:JobService默認在斗弊冊主線程中處理傳入的每個操作,這意味著,你必須開一個新線
程來執行你的耗時操作,如果不這樣操作,將會阻塞來自JobManager的任何操作,特別是onStopJob操作

在Activity中,啟動服務
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
doService();
}
}

例子里可以看到,一共有五個條件,

如果我們的後台任務滿足JobService的一個或多個約束條件,就可以考慮是不是應該用JobService來執行。

⑵ android,app的後台伺服器,可以注冊,登錄功能的,需要哪些知識

做後台伺服器和android關系不大。你是android的,推薦你可以搭建一個javaweb的服務端。
服務端需要用到以下知識:
1、用tomcat做一個web伺服器
2、用java開發一個web客戶端,一般採用到以下一些技術 spring、mybatis。其中spring 的mvc做業務控制層,mybatis作為連接資料庫用。
3、spring mvc可以以http介面的方式,提供出來,然後android端通過http訪問
4、當然還有資料庫建表之類的,資料庫推薦你用mysql

⑶ android客戶端的後台伺服器開發環境用Eclipse還是MyEclipse

安卓模塊本身很小的,使用eclipse即可了。

⑷ Android O 後台服務限制

谷歌剛剛發布了Android O技術預覽版,為了提升續航和減少耗電,Android進一步限制了後台服務的運行。本文將為大家介紹Android O新增的後台服務限制,翻譯自Android O開發者博客,原文在 這里 。

當應用在後台運行時,仍然會佔用系統的內存。如果在後台運行的應用比較多,並且用戶正在玩游戲或者看視頻的時候,那麼很容易會導致系統卡頓。為了提升用戶體驗,Android O增加了對後台應用的限制。這篇文章將介紹系統對後台應用運行的限制,以及開發者應該如果修改應用以適應這個限制。

在Android系統中,很多應用和服務是可以同時運行的。比如說,用戶可以在一個窗口中玩游戲,在另一個窗口中瀏覽網頁,同時使用第三個應用來聽音樂。同時運行的應用越多,系統的負載就越大。如果又有其他的應用或者服務在後台運行的話,那麼又會增加系統的負載,最後導致系統卡頓,影響到用戶體驗,比如正在播放的音樂會突然停止。

為了減少系統卡頓,Android O限制那些用戶不再直接交互應用的運行。針對targetSdkVersion是Android O的應用,Android增加了以下兩種方式的限制:

大多數情況下,應用可以使用 JobScheler 的Jobs來繞開上述的限制。即使應用沒有處於運行狀態,應用可以安排 JobScheler 的Jobs來執行什麼工作,系統會在不影響用戶體驗的情況下,調度這些Jobs的運行。

後台服務會佔用系統資源,這個會導致糟糕的用戶體驗。為了解決這個問題,Android O對應用的後台服務增加了一堆的限制。注意這些限制僅僅是針對targetSdkVersion為Android O的應用,targetSdkVersion為25或者以下的應用不受影響。

系統會區分前台和後台應用。當滿足以下任意一個條件時,系統判定應用是前台的:

以上條件都不滿足,那麼應用就被系統認為是後台應用。

前台應用可以自由地運行前台和後台服務。當應用進入後台之後,它仍然有幾分鍾的時間窗口來啟動和運行服務。當這個時間窗口到期時,應用就進入空閑狀態,系統將停止應用的後台服務運行,這個操作和服務的 Service.stopSelf() 方法被調用類似。

某些情況下,後台應用會被臨時加入到白名單中運行幾分鍾。應用在白名單中時,它可以啟動服務而不受限制,並且後台服務也被運行。當需要處理對用戶可見的任務時,應用將被添加到白名單中,比如:

大多數時候,你的應用都可以用 JobScheler 替換掉後台服務。比如,CoolPhotoApp需要檢查用戶是否接收到好友分享的圖片,即使應用不在前台運行。按照之前的做法,應用需要使用後台服務去執行這個任務。升級到Android O後,開發者需要用按一定周期運行的Job替換掉後台服務來執行,查詢伺服器,完成後退出。

在Android O之前,創建一個前台服務的通常做法是先創建一個後台服務,然後將其提升到前台 。但這個做法到了Android O已經失效了。Android O提供了另外一個方法[ NotificationManager.startServiceInForeground() ]( https://developer.android.com/reference/android/app/NotificationManager.html#startServiceInForeground(android.content.Intent , int, android.app.Notification)),來創建前台服務。用這個方法創建的新服務永遠不會進入後台,所以不會受到後台服務的運行限制。

如果應用注冊了廣播,那麼只要有廣播發送,應用的廣播接收器就會自動運行,佔用系統資源。當很多應用都注冊了某個系統事件廣播時,那麼就會出現性能問題,因為當系統事件觸發廣播時所有的應用的接收器在很短的時間內都會被順序運行,這樣就會影響用戶體驗。為了解決這個問題,Android 7.0增加了對廣播的限制。Android O進一步加強了這個限制。

大多數情況下,應用之前注冊的隱式廣播可以用功能類似的 JobScheler 的job替代。比如,一個社交圖片類- -應用經常會在設備充電時,清除使用過程中產生的數據。該應用會在Manifest注冊ACTION_POWER_CONNECTED廣播,當接收到這個廣播是,執行清理的工作。升級到Android O時,應用需要刪除注冊的這個廣播,然後使用一個清理的job,這個job會在設備空閑並且充電時自動觸發執行。

有一部分隱式廣播是不受這個限制的,應用可以繼續在Manifest中注冊使用,不管應用的targetSdkVersion是多少。這部分不受限制的廣播,可以查看 Implicit Broadcast Exceptions 。

上面介紹的這些變化不會影響到targetSdkVersion是25或者以下的應用 。但是如果應用是targetSdkVersion是Android O對應的API級別,需要修改應用以遵守這些新的限制。

如果應用在空閑狀態仍然在運行後台服務,那麼你需要替換掉這些後台服務。可以採用如下的方案:

檢查在Manifest注冊的廣播,替換掉隱式廣播:

⑸ android平台的app 手機客戶端和後台伺服器怎麼進行數據交互的

首先不要管安卓端還是蘋果端,現在一般都是響應式的app,你放到安卓或者蘋果或者pc或者平板都是沒有問題的。一般採用的是http介面通訊,或者socket連接。具體你要去查資料找Demo了。而且現在主流是採用html5開發或者混合開發了。所以最好是伺服器提供appAPI介面,通過http訪問伺服器,獲取數據,數據一般是json,或者xml,拿到後解析數據就可以了,然後再用UI框架或者其他框架或者自定義的UI封裝下格式很漂亮了,至於cookie和session等,看你的習慣,網路驗證和簽名那些也自己看習慣,如果涉及到大數據,還需要引入第三方框架的,直接引入就可以了,不過推薦自己寫,防止侵權。都是很通用的。

⑹ Android 啟動後台運行程序(Service)

Android開發中,當需要創建在後台運行的程序的時候,就要使用到Service。Service 可以分為有無限生命和有限生命兩種。特別需要注意的是Service跟Activities是不同的(簡單來說可以理解為後台與前台的區別),例如,如果需要使用Service的話,需要調用startService(),從而利用startService()去調用Service中的OnCreate()和onStart()方法來啟動一個後台的Service。 啟動一個Service的過程如下:context.startService() ->onCreate()- >onStart()->Service running其中onCreate()可以進行一些服務的初始化工作,onStart()則啟動服務。 停止一個Service的過程如下:context.stopService() | ->onDestroy() ->Service stop 接下來的實例是一個利用後台服務播放音樂的小例子,點擊start運行服務,點擊stop停止服務。ServicesDemo.java(是一個Activity)

package com.android.myservice;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ServiceDemo extends Activity implements OnClickListener {
private static final String TAG = "ServiceDemo";
Button buttonStart, buttonStop;

}

除此之外還要在Manifest裡面聲明服務:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android=" http://schemas.android.com/apk/res/android "
package="com.android.myservice">
<application android:label="@string/app_name">
<activity android:name=".ServiceDemo" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service android:enabled="true" android:name=".MyService"/>
</application>
</manifest>

定義Service(MyService.java

package com.android.myservice;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class MyService extends Service {
private static final String TAG = "MyService";
MediaPlayer player;

}

layout文件夾中是main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=" http://schemas.android.com/apk/res/android "
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/services_demo" android:gravity="center" android:textSize="20sp" android:padding="20dp"/>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonStart" android:text="@string/start"></Button>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/stop" android:id="@+id/buttonStop"></Button>
</LinearLayout>

values 文件夾中是strings.xml

<?xml version="1.0" encoding="utf-8"?>

<resources>
<string name="start">Start</string>
<string name="stop">Stop</string>
<string name="services_demo">Service Demo</string>
</resources>

⑺ Android 服務的限制

Google官網將Android服務分為了三種,前台服務,後台服務和綁定服務:

前台服務執行一些用戶能注意到的操作。例如,音頻應用會使用前台服務來播放音頻曲目。前台服務必須顯示 通知 。即使用戶停止與應用的交互,前台服務仍會繼續運行。

後台服務執行用戶不會直接注意到的操作。例如,如果應用使用某個服務來壓縮存儲空間,則此服務通常是後台服務。

當應用組件通過調用 bindService() 綁定到服務時,服務即處於 綁定 狀態。綁定服務會提供客戶端-伺服器介面,以便組件與服務進行交互、發送請求、接收結果,甚至是利用進程間通信 (IPC) 跨進程執行這些操作。僅當與另一個應用組件綁定時,綁定服務才會運行。多個組件可同時綁定到該服務,但全部取消綁定後,該服務即會被銷毀。

我個人理解服務可以分為兩種, 前台 和 後台 ,而 綁定 應該是被當作一種狀態,因為 前台服務 和 後台服務 都可以進行綁定。

基於這個理解,我們將限制分成了前台和後台兩個部分:

從 Android 5.0(API 級別 21)開始,如果使用隱式 Intent 調用 bindService() ,則系統會拋出異常。為確保應用的安全性,在啟動 Service 時,請始終使用顯式 Intent,且不要為服務聲明 Intent 過濾器。

在後台中運行的 Service 會消耗設備資源,這可能會降低用戶體驗。 為了緩解這一問題,系統對這些 Service 施加了一些限制。

處於前台時,應用可以自由創建和運行前台與後台 Service。

Android 8.0 開始:系統不允許後台應用創建後台 Service。否則該函數將引發一個 IllegalStateException。

Android 8.0 開始:進入後台時,在一個持續數分鍾的時間窗內,應用仍可以創建和使用 Service。 在該時間窗結束後,應用將被視為處於 空閑 狀態。 此時,系統將停止應用的後台 Service,就像應用已經調用 Service 的 Service.stopSelf() 方法一樣。

為了解除這種限制,可以使用 JobScheler 作業替換後台 Service。

在 Android 8.0 之前,創建前台 Service 的方式通常是先創建一個後台 Service,然後將該 Service 推到前台。

而在Android 8.0 之後,系統不允許後台應用創建後台 Service。

解決方案:調用 startForegroundService() ,以在前台啟動新 Service。

在系統創建 Service 後,應用有五秒的時間來調用該 Service 的 startForeground() 方法以顯示新 Service 的用戶可見通知。 如果應用在此時間限制內 未 調用 startForeground() ,則系統將停止此 Service 並聲明此應用為 ANR 。

前台服務必須顯示優先順序為 PRIORITY_LOW 或更高的 狀態欄通知 ,這有助於確保用戶知道應用正在執行的任務。如果某操作不是特別重要,因而您希望使用最低優先順序通知,則可能不適合使用服務;相反,您可以考慮使用 計劃作業 。

在 Android 9 (API 28)之後,使用前台服務必須申請 FOREGROUND_SERVICE 許可權,否則會報 SecurityException 。 這是普通許可權,因此,系統會自動為請求許可權的應用授予此許可權。

每個運行服務的應用都會給系統帶來額外負擔,從而消耗系統資源。如果應用嘗試使用低優先順序通知隱藏其服務,則可能會降低用戶正在主動交互的應用的性能。因此,如果某個應用嘗試運行擁有最低優先順序通知的服務,則系統會在抽屜式通知欄的底部調用出該應用的行為。

以 Android 12 為目標平台的應用在後台運行時無法再啟動 前台服務 。

Android 11 及以後,系統對前台服務何時可以訪問設備的位置、攝像頭或麥克風進行了限制。

如果您的應用以 Android 11 或更高版本為目標平台,且在前台服務中訪問攝像頭或麥克風,則必須添加 前台服務類型 camera 和 microphone 。

如果你的應用 在後台運行時啟動了某項前台服務 :

如果某服務的功能(位置、麥克風 和 相機)受到了限制,則Logcat中會列印如下語句:

熱點內容
防雷支架應配置什麼電纜 發布:2025-07-05 00:05:56 瀏覽:218
iosc語言函數 發布:2025-07-05 00:02:40 瀏覽:990
android打飛機 發布:2025-07-04 23:59:34 瀏覽:210
mr底層演算法 發布:2025-07-04 23:14:59 瀏覽:781
怎麼注冊作業盒子密碼 發布:2025-07-04 23:14:51 瀏覽:924
速達伺服器ip 發布:2025-07-04 23:07:38 瀏覽:262
哪裡能下載安卓版刺激戰場 發布:2025-07-04 23:02:27 瀏覽:520
android微信推送消息推送消息 發布:2025-07-04 22:56:52 瀏覽:387
android分享文件 發布:2025-07-04 22:56:40 瀏覽:405
c語言方程的根 發布:2025-07-04 22:55:33 瀏覽:449