IM ϵy(tng)w

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

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

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

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

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

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