折腾:
【记录】研究Android项目rcsjta中RCS的core的service启动的代码调用逻辑关系和顺序
期间,目前代码逻辑没有完全搞懂。
然后用 调试core+运行RI 有点发现,但是还是没结果,没找到core是如何初始化的
然后打算去换换别的apk去试试
即:
调试core
然后手动运行其他这几个apk,看看效果
是否能触发core中初始化的部分的代码
结果问题依旧。
RI
settings
相对来说,最有用,至少还能触发core中的service运行
比如
触发了:
之前就见过的:
com.gsma.services.rcs.action.GET_SERVICE_STARTING_STATE
但是其他几个apk,都不会触发
其中tts会崩溃,无法正常启动。所以不确定如果正常启动,是否会触发。
去点击关闭rcs service
再重新开启试试
期间可能是由于调试导致超时?
关闭失败:
提示:
Information Failed to get result for com.gsma.service.rcs.action.GET_ACTIVATION_MODE see Logcat!
去Logcat中看看
结果:看不到
因为此处没有调试settings
那想到了一个办法:
换个方式:
调试settings + 手动运行core
看看效果
不过此处运行到了一个 貌似有用的 断点:
src/main/java/com/gsma/services/rcs/RcsServiceControl.java
/** * Gets an instance of RcsServiceControl * * @param ctx the context. * @return RcsServiceControl the singleton instance. */ public static RcsServiceControl getInstance(Context ctx) { if (sInstance != null) { return sInstance; } synchronized (RcsServiceControl.class) { if (sInstance == null) { if (ctx == null) { throw new IllegalArgumentException("Context is null"); } sInstance = new RcsServiceControl(ctx.getApplicationContext()); } } return sInstance; }
继续:
src/main/java/com/gsma/services/rcs/RcsServiceControl.java
private RcsServiceControl(Context ctx) { HandlerThread handlerThread = new HandlerThread(getClass().getSimpleName()); handlerThread.start(); mHandler = new Handler(handlerThread.getLooper()); mContext = ctx; }
继续返回到了
src/com/gsma/rcs/core/control/CoreControlApplication.java
public class CoreControlApplication extends Application { @Override public void onCreate() { super.onCreate(); Context context = getApplicationContext(); mRcsServiceControl = RcsServiceControl.getInstance(context); final ConnectionManager cnxManager = ConnectionManager.createInstance(context, mRcsServiceControl, RcsServiceName.FILE_TRANSFER, RcsServiceName.CHAT, RcsServiceName.CONTACT); /* Do not execute the ConnectionManager on the main thread */ Handler mainThreadHandler = new Handler(Looper.getMainLooper()); mainThreadHandler.postDelayed(new Runnable() { @Override public void run() { cnxManager.start(); sCnxManagerStarted = true; } }, DELAY_FOR_STARTING_CNX_MANAGER); }
看起来,至少和RCS的core的service相关
然后
src/main/java/com/gsma/rcs/api/connection/ConnectionManager.java
/** * Start connection manager */ public void start() { /* Register the broadcast receiver to catch ACTION_SERVICE_UP */ mCtx.registerReceiver(new RcsServiceReceiver(), new IntentFilter( RcsService.ACTION_SERVICE_UP)); /* Register the broadcast receiver to pool periodically the API connections */ mCtx.registerReceiver(new ReceiveTimerToReConnectApi(), new IntentFilter(ACTION_CONNECT)); mRetryCount = 0; connectApis(); }
此处问题依旧:
com.gsma.services.rcs.action.GET_SERVICE_STARTING_STATE
返回还是null
此处还是和之前一样
虽然context manager 启动了
但是内部的core的service没启动。
然后还是:
服务没有启动
不过,此处去点击启动core的Provisioning
但是还是没有运行到断点
没有运行到和RCS的core的service相关的代码
所以感觉还是要去找代码逻辑:
【记录】研究rcsjta中的RcsCoreService的代码调用逻辑和顺序
然后去试试:
【无法解决】尝试通过卸载重装rcsjta的几个apk看看现象是否有变化以求找到rcs的core的service启动逻辑
然后继续去:
【未解决】rcsjta中研究RCS的core的Service本身相关代码以希望找到为何没启动的原因