zoukankan      html  css  js  c++  java
  • java static段代码调用时间

    public class SmsManager {
        private static SmsManager[] sInstance;
        private int mPhoneId = -1;
        static{
            sInstance = new SmsManager[2];
            for(int i =0; i<2; i++){
                sInstance[0] = new SmsManager(i);
                Log.d("jimwind","SmsManager static "+i);
            }
        }
        
        private SmsManager(int phoneId){
            mPhoneId = phoneId;
        }
        
        public static SmsManager getDefault(int phoneId){
            if(phoneId > 1)
                throw new IllegalArgumentException("phoneId exceeds phoneCount");
            Log.d("jimwind","SmsManager getDefault");
            return sInstance[phoneId];
        }
    }
    java object static

    使用类时,调用SmsManager.getDefault(0);先加载类,运行static代码段,然后运行getDefault(); 

    TelephonyManager也是类似的方式。

    ---------------------------------------------------------------------------------------------

    ITelephony.Stub.asInterface

    ITelephony.aidl在编译时不使用,而是使用用Android的SDK中提供了一个aidl工具生成的ITelephony.java

    ITelephony.java 就相当于两个进程间的通信协议。

    实验:

    /*
     * Copyright (C) 2007 The Android Open Source Project
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package com.mi.telephony;
    
    
    /**
     * Interface used to interact with the phone.  Mostly this is used by the
     * TelephonyManager class.  A few places are still using this directly.
     * Please clean them up if possible and use TelephonyManager insteadl.
     *
     * {@hide}
     */
    interface ITelephony {
    
        /**
         * Dial a number. This doesn't place the call. It displays
         * the Dialer screen.
         * @param number the number to be dialed. If null, this
         * would display the Dialer screen with no number pre-filled.
         */
        void dial(String number);
    
    
    }
    ITelephony.aidl

    放在com/mi/telephony下面

    >aidl commi elephonyITelephony.aidl

    生成ITelephony.java

    /*
     * This file is auto-generated.  DO NOT MODIFY.
     * Original file: com\mi\telephony\ITelephony.aidl
     */
    package com.mi.telephony;
    /**
     * Interface used to interact with the phone.  Mostly this is used by the
     * TelephonyManager class.  A few places are still using this directly.
     * Please clean them up if possible and use TelephonyManager insteadl.
     *
     * {@hide}
     */
    public interface ITelephony extends android.os.IInterface
    {
    /** Local-side IPC implementation stub class. */
    public static abstract class Stub extends android.os.Binder implements com.mi.telephony.ITelephony
    {
    private static final java.lang.String DESCRIPTOR = "com.mi.telephony.ITelephony";
    /** Construct the stub at attach it to the interface. */
    public Stub()
    {
    this.attachInterface(this, DESCRIPTOR);
    }
    /**
     * Cast an IBinder object into an com.mi.telephony.ITelephony interface,
     * generating a proxy if needed.
     */
    public static com.mi.telephony.ITelephony asInterface(android.os.IBinder obj)
    {
    if ((obj==null)) {
    return null;
    }
    android.os.IInterface iin = (android.os.IInterface)obj.queryLocalInterface(DESCRIPTOR);
    if (((iin!=null)&&(iin instanceof com.mi.telephony.ITelephony))) {
    return ((com.mi.telephony.ITelephony)iin);
    }
    return new com.mi.telephony.ITelephony.Stub.Proxy(obj);
    }
    public android.os.IBinder asBinder()
    {
    return this;
    }
    @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
    {
    switch (code)
    {
    case INTERFACE_TRANSACTION:
    {
    reply.writeString(DESCRIPTOR);
    return true;
    }
    case TRANSACTION_dial:
    {
    data.enforceInterface(DESCRIPTOR);
    java.lang.String _arg0;
    _arg0 = data.readString();
    this.dial(_arg0);
    reply.writeNoException();
    return true;
    }
    }
    return super.onTransact(code, data, reply, flags);
    }
    private static class Proxy implements com.mi.telephony.ITelephony
    {
    private android.os.IBinder mRemote;
    Proxy(android.os.IBinder remote)
    {
    mRemote = remote;
    }
    public android.os.IBinder asBinder()
    {
    return mRemote;
    }
    public java.lang.String getInterfaceDescriptor()
    {
    return DESCRIPTOR;
    }
    /**
         * Dial a number. This doesn't place the call. It displays
         * the Dialer screen.
         * @param number the number to be dialed. If null, this
         * would display the Dialer screen with no number pre-filled.
         */
    public void dial(java.lang.String number) throws android.os.RemoteException
    {
    android.os.Parcel _data = android.os.Parcel.obtain();
    android.os.Parcel _reply = android.os.Parcel.obtain();
    try {
    _data.writeInterfaceToken(DESCRIPTOR);
    _data.writeString(number);
    mRemote.transact(Stub.TRANSACTION_dial, _data, _reply, 0);
    _reply.readException();
    }
    finally {
    _reply.recycle();
    _data.recycle();
    }
    }
    }
    static final int TRANSACTION_dial = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
    }
    /**
         * Dial a number. This doesn't place the call. It displays
         * the Dialer screen.
         * @param number the number to be dialed. If null, this
         * would display the Dialer screen with no number pre-filled.
         */
    public void dial(java.lang.String number) throws android.os.RemoteException;
    }
    ITelephony.java

    ---------------------------------------------------------------------------------------------

    android 关于接口的使用:

    以Mms中ConversationList与DraftCache.OnDraftChangedListener接口调用关系分析

    1、 ConversationList implements DraftCache.OnDraftChangedListener

    实现接口中的函数onDraftChanged

    2、先查看在ConversationList类中,对类DraftCache的使用

    列出:

    DraftCache.getInstance().addOnDraftChangedListener(this);

    DraftCache.getInstance().refresh();

    DraftCache.getInstance().setDraftState();

    DraftCache.getInstance().getSavingDraft());

    DraftCache.getInstance().removeOnDraftChangedListener(this);

    3、再查看在DraftCache类中,对接口OnDraftChangedListener方法onDraftChanged中的调用。

    列出:

    refresh() -> private synchronized void rebuildCache()->onDraftChanged

    public synchronized void setDraftState() -> onDraftChanged

    这里,onDraftChanged是接口使用者自己实现,调用关系由定义接口的类确定。(如果接口使用者直接调用就没有意义了)

    ----------------------------------------------------------------------------------------- 

    类AsyncQueryHandler 的使用

    http://blog.csdn.net/chenqiumiao/article/details/7639577

  • 相关阅读:
    XP下在控制面板和登录界面中隐藏用户方法
    DataGirdView 单元格限制内容输入参考(按键时的判断)
    VB.Net操作Excel
    VS扩展:标签左置 — productivity power tools
    使用VBS自动删除已经从FTP下载下来的文件
    VB.Net下ComboBox操作收集
    修改网卡IP信息的批处理文件
    VB.NET自定义控件 —— 添加控件自定义属性
    使用关键字对数组进行模糊查找;对一维字符串数组进行排序
    mysql多字段模糊查询
  • 原文地址:https://www.cnblogs.com/jimwind/p/3493938.html
Copyright © 2011-2022 走看看