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 에 처음 들 어 가 는 방법 으로 단독 프로 세 스 서 비 스 를 시 작 했 습 니 다.

좋은 웹페이지 즐겨찾기