1. 使用過程中少用this
Activity.onStart.implementation = function() { console.log('onStart: ' + this); this.onStart(); //public static void SomeClass.init(final Context var0) SomeClass.init(this); }
上面的代碼中,當調用SomeClass.init(this) 方法會導致SomeClass的初始化不成功,因為這里的this並不是Activity的this實例,應該采用下面的方式調用
Activity.onStart.implementation = function() { console.log('onStart: ' + this); this.onStart(); //public static void SomeClass.init(final Context var0) var activityThis = this SomeClass.init(activityThis); }
2. 通過 Java.registerClass 注冊一個類時,如果需要在有參數的構造方法中調用父類有參數的構造方法需要采用下面的方式
var MyHandler = Java.registerClass({ name:'com.test.pq.MyHandler', superClass: Handler, methods: {
//public Handler(Looper looper) $init:{ argumentTypes:['android.os.Looper'], implementation: function(looper){ Handler.$init.overload('android.os.Looper').call(this, looper) }}, handleMessage:{ returnType:'void', argumentTypes:['android.os.Message'], implementation:function(msg) { console.log('handleMessage:' + msg.what) if (1000 == msg.what) { //心跳處理 } }} } });
上面的代碼新注冊了一個Handler的子類,構造方法要實現Handle(Looper)。在調用父類的構造方法時call()方法中一定要傳this實例,否則MyHandler類實例的looper將為null。
3. 調用某個類實例方法的多個重載版本時需要使用 類.方法.overload(參數, 參數...).call(類實例, 參數值, 參數值...)
//public void com.test.SomeClass.a(java.lang.String,java.lang.String) SomeClass.a.overload('java.lang.String','java.lang.String').call(objSomeClass, smsaddr, '0');
objSomeClass 是 SomeClass類的實例。
