android phone学习
大学的贪玩要不时间补回来,这要付出巨大的努力。可以说,毕业四年,我每天都过的很充实,从工作那天开始,2008.5.12大地震那天我入职了,从那天开始,我没虚度一天,每天都很努力,四年了,机会没有那天在12点前睡国校,我深知,自己很笨,自己学东西慢,那就只能笨鸟先飞。
此时,有多少程序员在苦苦的思索,张毫在干什么呢?我已经不在年轻,我需要吧launcher, setting ,phone, contact四个应用程序搞透彻了。
把linux的服务配置,日常应用搞透彻了。
把shell, python脚本搞透彻了。 对C ,C++, JAVA 有较好的理解。 这都需要学习,思考,理解,消化。
我是山沟的孩子,没有关系,没有经验,只能吃苦,对自己严格要求。
我不怕苦,不怕输。 一直努力,就不信不行。 必须深度探索。 没有坚强的意志什么都干不了。
phone有通知机制,把底层状态的变化上报通知给应用程序,应用程序需要TelephonyManger.listen
public void listen(PhoneStateListener listener, int events) {
String pkgForDebug = sContext != null ? sContext.getPackageName() : "<unknown>";
try {
Boolean notifyNow = (getITelephony() != null);
sRegistry.listen(pkgForDebug, listener.callback, events, notifyNow);
} catch (RemoteException ex) {
// system process dead
} catch (NullPointerException ex) {
// system process dead
}
}
我们一看就知道,sRegistry.listen(pkgForDebug, listener.callback, events, notifyNow); 这个东西其实是吧phonestatelistener 的callback保存起来,保存在哪了嗯?
保存到了telephonyregistry的listenerj函数里。
final int N = mRecords.size();
for (int i = 0; i < N; i++) {
r = mRecords.get(i);
if (b == r.binder) {
break find_and_add;
}
}
r = new Record();
r.binder = b;
r.callback = callback;
r.pkgForDebug = pkgForDebug;
mRecords.add(r);
}
这里一看就是保存起来了。保存起来如何通知呢,需要应用程序发指令通知,
可以看看gsmphone的 notifySignalStrength() {
mNotifier.notifySignalStrength(this);
}
一看就是通知了, for (Record r : mRecords) {
if ((r.events & PhoneStateListener.LISTEN_SIGNAL_STRENGTHS) != 0) {
try {
r.callback.onSignalStrengthsChanged(new SignalStrength(signalStrength));
} catch (RemoteException ex) {
这就是进程间通信了,那应用程序如何知道呢》? IPhoneStateListener callback = new IPhoneStateListener.Stub() {
public void onServiceStateChanged(ServiceState serviceState) {
Message.obtain(mHandler, LISTEN_SERVICE_STATE, 0, 0, serviceState).sendToTarget();
}
这个callback其实是个phonestatelisnter 的内部类,它会在发个message通知外部类, 这就是为什么要交listen的时候要继承phonestatelistener来获取通知了