IM ϵy(tng)w

ψDʾ˱·һ׳ IM ϵy(tng)һ(hu)Ϣ··ɗlL(zhng)Bͨ(dng)Ϣ_(d)r(sh)Ϣ(w)ȕ(hu)ДϢ·ǷϢ·̎ڴB(ti)Ϣ(yu)ȏϢ·°l(f)͑t(hu)·ɵͷ(w)·°l(f)
C·漰Ϣ··ɗl·ı@ɗl·ʹÈ(chng)IJͬϳC(j)ͬģԸвͬČһx
·ıҪ
TCP Socket Bӽ֮κ̎@(g)Bӕ(hu)L(zhng)r(sh)gڲҿÆǷġԭЃc(din)
һĬJ(rn)Socket Bӟo(w)r(sh)̽y(c)·Įrʹ Socket Čԅ(sh) KeepAlive O(sh)Þ True Ȼo(w)r(sh)@ȡ·B(ti)@?yn)?Socket BӠB(ti)һ(g)B(ti)C(j)M(jn)оSo(h)ģBꮅp(hu)̎ڽB(ti)ij_(ti)(w)?yn)ijЩԭ(q)?f)do(w)r(sh)푑(yng)I(y)(w)Ո(qng)@r(sh) TCP ̽y(c)ȻBӠB(ti)(sh)Hϴ·ѽ(jng)ˡ
(gu)(ni)\(yn)I(yng)̵ NAT r(sh)C(j)ƕ(hu)һr(sh)g(ni)]Д(sh)(j)BӔ_@(g)r(sh)gֻЎh(yun)o(w)M҂L(zhng)B
ͨñC(j)-C(j)
ԭҪS Socket BL(zhng)r(sh)gҪ(sh)F(xin)ԼıC(j)ơͨõһNC(j)ƾC(j)͑ÿһΕr(sh)go(w)l(f)һ(g)СĔ(sh)(j)(j)ܷյ(w)푑(yng)(li)Д·Ŀԡ˹(ji)ʡ@(g)һdzС]Ѓ(ni)

ô͑Ό(sh)F(xin)r(sh)l(f)һЃɷNʽ
һNͨ^(gu) Java Timer (li)(sh)F(xin)IJE£
- һ(g)Ҫ(zh)е΄(w) TimerTask
- (chung)һ(g) Timer (sh)ͨ^(gu) Timer ṩ schedule TimerTask 뵽r(sh) Timer O(sh)ÿһΕr(sh)g(zh) TimerTask , TimerTask l(f)@Nʽ(sh)F(xin)(li)^(jin)ʡҪ WakeLock ȱc(din)Ҳ@L(zhng)r(sh)gں_(ti)M(jn)̱ջϵy(tng)ߺ Timer C(j)S֮ʧЧ
һNʽðϵy(tng)Ķr(sh)΄(w) AlarmManager ѭh(hun)(zh)аl(f)΄(w)@Nʽ(hu)?yn)ϵy(tng)߶ʧЧϵy(tng)ߺȻͨ^(gu) WakeLock (zh)΄(w)(du) Timer C(j)ƣ@Nʽ^M(fi)ʹõĕr(sh)һҪעc(din)
- ȸ(j)ʹ AlarmManager [犅(sh)[犸(sh)ą^(q)e±

- AlarmManager ṩ cancel O(sh)µĶr(sh)΄(w)ǰͨ^(gu) cancel ȡϵy(tng)O(sh)õͬ΄(w)O(sh)΄(w)
- 6.0 汾 Doze ģʽṩµ[O(sh)÷ setExactAndAllowWhileIdle ͨ^(gu)ԓO(sh)õ[犕r(sh)gϵy(tng)(hu){(dio)(g)(yng)O(sh)õ(w)y(tng)һһΆ̎_(d)ʡ늵Ŀ]ڰ 6.0 ϵy(tng)(yu)ʹԓ
Ϣ·C(j)
Ϣ·հl(f)ϢҪͨҪ̶ȱ·Ŀ·û߮_r(sh)ܼr(sh)̽y(c)(dng)BȱϙC(j)Ϣ·ǰf(shu)C(j)⣬߀So(h)˃·(yu)C(j)ƣ(f)BәC(j)ƺBC(j)
(f)BәC(j)ƵĻE£
- ͑Bӌ(do)(w)(do)(w)(hu)°l(f)(yng)Ì(du)(yng)ϢаBӷ(w)ĵַб
- ͑ˏĵһ(g)(w)ַLԇB(dng)r(sh)C(j)Bʧ]мr(sh)յ(w)푑(yng) t^m(x)LԇBһ(g)ֱɹBɹBӵĵַ浽(yu)ַBӕr(sh)(yu)ʹô˵ַͨ^(gu)@NC(j)ܱϿ͑˃(yu)x(yu)·sBӕr(sh)g

BC(j)tָI(y)(w)ڙzy(c)c(w)BӔ_Lԇ N Bӷ(w)״Δ_ 1 (hu)BȻBӲɹ(hu) 2 Bgr(sh)gϴBgr(sh)g 2 LԇBӷ(w)ԴƮ(dng)LԇB N κȻBϷ(w)هLԇBֻھW(wng)j(lu)rl(f)׃´_(yng)Õr(sh)ŕ(hu)ٴ·LԇB

·C(j)
·Ϣ_(d)a(b)ֶҪML(zhng)ں_(ti)Ĵr(sh)gʹȻܱٴΆѡ iOS ֙C(j) APNS (li)_(d)ЧĹٷϵy(tng) FCM ڇ(gu)(ni)ڇ(gu)(ni)ϵy(tng)α͵_(d)ۂҪ˽°ϵy(tng)M(jn)̹ăɴC(j)ƣ
һN LMK C(j)Ӣ Low Memory Killer , Linux ă(ni)C(j)(li)Ҫͨ^(gu)M(jn)̵ oom_adj ֵ(li)жM(jn)̵Ҫ̶ĶQǷ@ЩM(jn) oom_adj ֵԽҪԽ native M(jn)̣ framework ӆ(dng)ϵy(tng)M(jn)(yu)ȼ(j)һ㶼ؓ(f)(sh)ǰ_(ti)ҊM(jn)ϵy(tng)Ҳ(hu)աȻҊM(jn)˵_(ti) oom_adj ֵ(hu)ϵy(tng)r(sh)r(sh)
һNC(j)ǰԭę(qun)C(j)ƣ AppOps Sڴ˻A(ch)M(jn)ȶƻСİȫA֙C(j)ܼҵȣÁ(li)M(jn)Й(qun)ԓ(qun)C(j)\(yn)ڰϵy(tng)Ŀ܌όӸ(yng)õM(jn)Lԇ(dng)ϵy(tng)ȕ(hu)ȥ(qun)ęzԓM(jn)Л]Ԇ(dng)(qun)УŜ(zhn)膢(dng)tĿ܌ֱϵy(tng)Ć(dng)
σɷNC(j)·ıҲɷ֞ɴ
һM(jn)̱˼·Ǹ(j) LMK C(j)M(jn)̃(yu)ȼ(j)ͱĎҪN
- O(jin) ¼(dng) 1 Activity ʹ(yng)M(jn)D(zhun)ҕM(jn)̣ͱĻ?x)rP(gun)]ԓ Activity
- p(w)o(h) A (w) startForeground ʽ(dng)l(f)һ(g)֪ͨ B (w)ͬ startForeground ʽ(dng)Ұl(f)ͺ A ͬ ID ֪ͨȻ B (w){(dio) stopForeground ȡ֪ͨ@ A (w)͕(hu)ǰ_(ti)M(jn)̵ʽҲӰÑ֪
- (j)ļiԭO(jin)ҕ Java M(jn)̴B(ti) Linux ӳɹļtͨ^(gu) exec _һ(g) Linux ĿɈ(zh)ļ_һ(g) Daemon M(jn) ԓM(jn)?yn)?Linux ӆ(dng)ڰ 5.0 ֮ǰ(yu)ȼ(j)(hu)^(hu)ڰ 5.0 ֮ԓʽЧ
M(jn)IJԺͰϵy(tng) AppOps C(j)P(gun)һN
- Service Sticky Service onStartCommand з START_STICKY @Ӯ(dng) Service ϵy(tng)(hu)Ԅ(dng)Lԇ؆^(gu)ڇ(gu)(ni)ƻϵy(tng)@Nʽܳɹ؆ĎʺܵͣҪÑڙ(qun)Ĵ_Ԇ(dng)ș(qun)ޣܳɹ
- Ҳǰv^(gu)C(j)^(gu)@Ҫʹ AlarmManager O(sh) ELAPSED_REALTIME_WAKEUP Ե[犣ϵy(tng)ߺŕ(hu)ܵ¼ĶM(jn)
- ͨ^(gu)O(jin) W(wng)j(lu)ГQÑО¼M(jn)
- (yng)gϵy(tng)кÎׂ(g)(yng)üͬһ(g) SDK , ôÑ(dng)ijһ(g) App ĕr(sh) SDK (hu)ȥ(yng)“ֵܽ” @Nʽ(du)Ñw(yn)dz(hu)ϵy(tng)Īĺ

@Nϵy(tng)(j)eʡ늣ʡ(ni)_(d)ʸߡ(yng)ÿԸ(j)֙C(j)̖(ho)IJͬ(yu)ʹÏSϵy(tng)(j)eͣıC(j)̶ȱ͵ĵ_(d)
