Android 는 Service 단독 프로 세 스 를 통 해 오프라인 푸 시 를 모방 합 니 다.
먼저 제 가 메시지 푸 시 에 대한 이 해 를 간단히 말씀 드 리 겠 습 니 다. 여기 서 QQ 를 예 로 들 어 보 겠 습 니 다. 저희 핸드폰 에 있 는 QQ 가 오프라인 되 었 고 QQ 앱 에서 탈퇴 했 습 니 다. 그런데 이때 다른 사람 이 저희 에 게 메 시 지 를 보 내 면 저 희 는 접속 하지 않 았 습 니 다.서버 는 발송 자가 보 낸 정 보 를 전송 한 후에 우 리 는 통 지 를 발표 하여 우리 에 게 알려 준 사용 자 를 표시 할 것 이다.
원 리 를 간단하게 논술 하 다.
상기 개술 을 통 해 저 희 는 독립 된 프로 세 스 의 백 스테이지 서비스 가 필요 하 다 는 것 을 알 게 되 었 습 니 다.
. xml 에 Service 를 등록 할 때 android: process 속성 이 있 습 니 다. 이 속성 은 두 가지 상황 이 있 습 니 다. 즉, '와: 두 가지' 입 니 다. 이 서 비 스 를 대표 하여 전체적인 독립 프로 세 스 를 시작 합 니 다. 만약 에: 시작 하면 이 서 비 스 를 위해 개인 적 인 독립 프로 세 스 를 시작 합 니 다.
인 코딩 구현:
ServerPushService 파일:
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class ServerPushService extends Service{
//
private MessageThread messageThread = null;
//
private Intent messageIntent = null;
private PendingIntent messagePendingIntent = null;
//
private int messageNotificationID = 1000;
private Notification messageNotification = null;
private NotificationManager messageNotificationManager = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//
messageNotification = new Notification();
messageNotification.icon = R.drawable.ic_launcher; //
messageNotification.tickerText = " "; //
messageNotification.defaults = Notification.DEFAULT_SOUND;
messageNotificationManager = (NotificationManager) getSystemService(this.NOTIFICATION_SERVICE);
//
messageIntent = new Intent(this,MessageActivity.class);
messagePendingIntent = PendingIntent.getActivity(this, 0, messageIntent, 0);
//
MessageThread thread = new MessageThread();
thread.isRunning = true;
thread.start();
return super.onStartCommand(intent, flags, startId);
}
/***
*
* @author zhanglei
*
*/
class MessageThread extends Thread{
//
public boolean isRunning = true;
@Override
public void run() {
while(isRunning){
try {
// 10
Thread.sleep(10000);
if(getServerMessage().equals("yes")){
//
messageNotification.setLatestEventInfo(ServerPushService.this, " !", " ", messagePendingIntent);
//
messageNotificationManager.notify(messageNotificationID, messageNotification);
// , ID
messageNotificationID++;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/***
* 。 message
* @return
*/
public String getServerMessage(){
return "yes";
}
}
이 서 비 스 를 단독 프로 세 스에 등록 합 니 다.
<!-- -->
<service
android:name="com.jay.serverpush.ServerPushService"
android:process=":message"
>
</service>
설명: 이 파일 은 백 엔 드 실행 에 사용 할 서 비 스 를 작 성 했 습 니 다. manifest 에서 이 서 비 스 를 progress 로 설명 합 니 다. 시작 합 니 다. 이렇게 단독 프로 세 스 에서 실 행 됩 니 다. 프로그램 이 종 료 된 후에 프로 세 스 가 닫 히 지 않 는 목적 을 달성 하여 오프라인 푸 시 목적 을 실현 합 니 다. 인 코딩 의 설명 이 명확 합 니 다. 서버 검색, 논리 발표 알림 판단 등 을 수행 합 니 다.주석 은 명확 하 다. 여기 서 논술 하지 않 는 다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.startService(new Intent(this,ServerPushService.class));
}
this.startService(new Intent(this,ServerPushService.class));
이 말 을 통 해 oncreate 에 처음 들 어 가 는 방법 으로 단독 프로 세 스 서 비 스 를 시 작 했 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.