问题
在进行模块化的时候,试图将诸如SearchListener
, CallManager
的模块从MainActivity
中拆出来,然而在响应事件的时候,不可避免的需要改变其他资源状态,那么就需要获取其句柄。由此还需要把MainActivity
作为句柄传入代码。
更令人纠结的是,由于存在一些异步事件(如申请权限),其触发在模块(CallManager
)中,其接受在主体视图(MainActivity
)中,又需要将保有的参数重新传回MainActivity
,如此绕来绕去,让我不禁反思我模块化时候存在的问题。
作者:木鸟杂记 https://www.qtmuniao.com, 转载请注明出处
细节
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| CallManager.java
public boolean playCall(String phoneNumber) { if (ContextCompat.checkSelfPermission(activity, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CALL_PHONE}, CALL_PHONE_REQUEST);
MainActivity ma = (MainActivity) activity; **ma.setPhoneNumber(phoneNumber);**
return false; ... }
MainActivity.java
private String phoneNumber = null; public void setPhoneNumber(String number) {this.phoneNumber = number;} public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case CallManager.CALL_PHONE_REQUEST: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (phoneNumber != null ) { CallManager callManager = new CallManager(this); callManager.playCall(phoneNumber);
} } break;
... } }
|
在Activity
中接收到call event调用CallManager
,然后在其中请求权限,利用Set方法,将PhoneNumber
传回Activity
。初步想法是可以将请求权限、被授予权限后执行回调函数这种和Activity
紧耦合的代码方法写在MainActivity
中,然后CallManager
只处理call逻辑。但仍需要一个类变量来保存电话号码,以进行从请求权限到执行回调之前的参数传递工作。
我是青藤木鸟,一个喜欢摄影、专注大规模数据系统的程序员,欢迎关注我的公众号:“木鸟杂记”,有更多的分布式系统、存储和数据库相关的文章,欢迎关注。
关注公众号后,回复“资料”可以获取我总结一份分布式数据库学习资料。
回复“优惠券”可以获取我的大规模数据系统付费专栏《系统日知录》的八折优惠券。
我们还有相关的分布式系统和数据库的群,可以添加我的微信号:qtmuniao,我拉你入群。加我时记得备注:“分布式系统群”。
另外,如果你不想加群,还有一个分布式系统和数据库的论坛(点这里),欢迎来玩耍。