Android 使用Service實現不間斷的網路請求
阿新 • • 發佈:2019-02-06
前言
Android 如何在返回到桌面後,依然在後臺不間斷地請求伺服器?
使用前臺Service
使用前臺Service,可以使你的app返回到桌面後,甚至程序被殺死後,依舊會有一個Service執行在後臺;在通知欄會開啟一個通知,顯示你的app的內容;點選通知,可以快速開啟你的app;
- 建立一個Service,覆寫
onCreate
;
public class NetListenService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
}
- 在
onCreate
中,使用NotificationManager
建立一個通知;
NotificationManager sNM = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder sBuilder = new NotificationCompat
.Builder(NetListenService.this)
.setSmallIcon(R.mipmap .ic_launcher)
.setContentTitle("正在監聽")
.setContentText("已收到警報" + notificationCount + "條");
Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(getApplicationContext(), 0 , resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
sBuilder.setContentIntent(resultPendingIntent);
sNM.notify(0, sBuilder.build());
- 開啟
Service
;
Intent intent = new Intent(this, NetListenService.class);
startService(intent);
不間斷地請求伺服器
- 使用
Handler().postDelayed
開啟一個延時的執行緒;延時時間到了以後,執行網路請求任務;開啟下一個延時執行緒執行緒;
private void executeNetListen() {
new Handler().postDelayed(new Runnable() {
public void run() {
requestServer();
executeNetListen();
}
}, getIntervalTime());
}
- 使用volley來請求伺服器;獲取
volley
佇列;
private RequestQueue mQueue;
mQueue = Volley.newRequestQueue(getApplicationContext());
- 使用
volley
請求網路;
private void requestServer() {
StringRequest request = new StringRequest(Request.Method.GET, Config.URL_BASE, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(Config.TAG, "NetListenService->onResponse: " + response);
}
}, new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error) {
}
});
mQueue.add(request);
}
修改AndroidManifest.xml
- 新增網路許可權;
<uses-permission android:name="android.permission.INTERNET" />
- 註冊你的service;
<service
android:name=".service.NetListenService"
android:enabled="true"
android:exported="true"></service>
總結
- 要讓你的app不被輕易的殺死,可以開啟一個前臺Service保留在系統中;
- 在Service中,使用延遲執行緒來不間斷地隔一段時間做某件事情;