Android 에서 App 을 이용 하여 메시지 전송 메커니즘 을 실현 하 는 코드

1.메시지 푸 시 메커니즘 서버 엔 드 는 수 동적 으로 주동 적 으로 바 뀌 어야 합 니 다.고객 에 게 일부 개발 업 체 가 중요 하 다 고 생각 하 는 정 보 를 알려 야 합 니 다.응용 프로그램 이 실행 되 거나 닫 히 든 간 에.나 는 한 마디 생각 났 다:don't call me,i will call you!qq 오늘 오른쪽 아래 에 대화 상자 가 나 왔 습 니 다."오바마 가 빈 라 덴 이 끊 었 다 고 발 표 했 습 니 다."바로 이 렇 습 니 다.똑똑 한 척 하면 잔 머리 가 나 오고 좋아 하 는 사람 이 있 으 면 싫어 하 는 사람 이 있다.2.독립 프로 세 스 는 프로그램 이 실행 되 고 있 든 없 든 우 리 는 고객 에 게 알 릴 수 있어 야 합 니 다.우 리 는 독립 프로 세 스 의 배경 서비스 가 필요 합 니 다.우 리 는 독립 된 프로 세 스 의 백 스테이지 서비스 가 필요 하 다.androidmanifest.xml 에 서 비 스 를 등록 할 때 android:process 속성 이 있 습 니 다.이 속성 이"."로 시작 하면 이 서 비 스 는 전역 적 인 독립 프로 세 스 를 시작 합 니 다.":"로 시작 하면 이 서 비 스 를 위해 개인 적 인 독립 프로 세 스 를 시작 합 니 다.구체 적 인 예 를 들 어 애플 리 케 이 션 을 새로 만 들 었 습 니 다.메 인 프로 세 스 com.cnblogs.tianxia 를 만 들 었 습 니 다.그러면
 
<!-- com.cnblogs.tianxia.message -->
<service android:name=".service.messageservice" android:label=" " android:process=".message" />
<!-- -->
<!-- com.cnblogs.tianxia:message -->
<service android:name=".service.messageservice" android:label=" " android:process=":message" />
, , 。
3.
public class messageservice extends service {

//
private messagethread messagethread = null;

//
private intent messageintent = null;
private pendingintent messagependingintent = null;

//
private int messagenotificationid = 1000;
private notification messagenotification = null;
private notificationmanager messagenotificatiomanager = null;

public ibinder onbind(intent intent) {
return null;
}

@override
public int onstartcommand(intent intent, int flags, int startid) {
//
messagenotification = new notification();
messagenotification.icon = r.drawable.icon;
messagenotification.tickertext = " ";
messagenotification.defaults = notification.default_sound;
messagenotificatiomanager = (notificationmanager)getsystemservice(context.notification_service);

messageintent = new intent(this, messageactivity.class);
messagependingintent = pendingintent.getactivity(this,0,messageintent,0);

//
messagethread = new messagethread();
messagethread.isrunning = true;
messagethread.start();

return super.onstartcommand(intent, flags, startid);
}

/**
*
*
*/
class messagethread extends thread{
// ,www.3ppt.com
public boolean isrunning = true;
public void run() {
while(isrunning){
try {
// 10
thread.sleep(600000);
//
string servermessage = getservermessage();
if(servermessage!=null&&!"".equals(servermessage)){
//
messagenotification.setlatesteventinfo(messageservice.this," "," ,
!"+servermessage,messagependingintent);
messagenotificatiomanager.notify(messagenotificationid, messagenotification);
// , id ,
messagenotificationid++;
}
} catch (interruptedexception e) {
e.printstacktrace();
}
}
}
}

/**
* demo,
* @return , ,
*/
public string getservermessage(){
return "yes!";
}
}

그 중에서 messageactivity 는 점프 를 클릭 한 activity 로 상세 한 정 보 를 처리 합 니 다.다른 activity 에서 호출 합 니 다.
 
boolean ismessagepush = true;// false;
...
if(ismessagepush){
startservice(new intent(this, messageservice.class))
};
실행 합 니 다.4.서비스 1 stopservice(new intent(my activity.this,messageservice.class)를 중단 합 니 다.2 setmessagepush(false);//설정 파일 이나 데이터베이스 에 있 는 flag 를 false 로 실행 시 키 고 서 비 스 를 중단 한 후에 의외로 멈 추 지 않 았 습 니 다.어떻게 된 일 입 니까?코드 잘못 쓴 거 아니 야?코드 가 잘못 되 지 않 았 습 니 다.서 비 스 를 멈 추 었 지만 프로 세 스 를 멈 추 지 않 고 스 레 드 를 종료 한 것 이 잘못 되 었 습 니 다.5.스 레 드 실천 을 종료 하면 thread 의 stop()방법 이 믿 을 수 없다 는 것 을 증명 합 니 다.하지만 우 리 는 다른 방법 이 있다.코드 앞에서 프로 그 래머 는 하느님 이다.스 레 드 를 종료 하 는 데 는 두 가지 방법 이 있 습 니 다.첫 번 째 방법,강제 퇴장./이 스 레 드 가 있 는 프로 세 스 를 죽 이면 자연히 2 system.exit(0)을 종료 합 니 다.두 번 째 방법 은 isrunning 을 false 로 설정 합 니 다.view sourceprint?1//앞에서 isrunning 이라는 표 지 를 언급 했 습 니 다.false 로 설정 한 후에 스 레 드 의 실행 은 while 순환 에서 뛰 어 나 왔 습 니 다.그리고 자 연 스 럽 게 2 messagethread.isrunning=false 를 끝 냈 습 니 다.종합 적 으로,우 리 는 message 서비스 에서 ondestroy()를 다시 불 러 오 는 방법 은 다음 과 같다.
 
@override
public void ondestroy() {
system.exit(0);
// , , system.exit(0),
//messagethread.isrunning = false;
super.ondestroy();
}

좋은 웹페이지 즐겨찾기