在开发过程中,我们倾向于分解我们的声明性服务组件,因此OSGi自然不会激活其他依赖组件。有没有办法诊断潜在的问题,即。 "为什么组件未被激活?"
对于简单的依赖图:
[BroadcastReceiver]
[IntentFilter(new[] { Intent.ActionBootCompleted }, Priority = (int)IntentFilterPriority.LowPriority)]
public class BootReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
Intent serviceStart = new Intent(context, typeof(MainActivity));
serviceStart.AddFlags (ActivityFlags.NewTask);
context.StartActivity(serviceStart);
}
}
如果A------>B------>C------->E
^
|
D-------+
无法激活所有相关组件,E
,C
,D
,B
也不会被激活。我需要一个控制台命令来询问"为什么A
未被激活?"并且答案将包含答案," A取决于B,B取决于C,C取决于E,E不可用"。
答案 0 :(得分:1)
目前不存在,但可以使用myController/myAction
API开发。这肯定会成为一个有趣而有用的项目。
您的两个诊断选项是:
gogo shell中的ScrService
和scr:list
命令。这些将告诉您为什么单个组件不活动。例如,如果您问为什么A不活动,它会告诉您它对scr:info
服务有一个不满意的引用。然后,您必须跟踪哪个组件应该注册B
服务,并找出未激活的原因。等等。
X-Ray plugin for Felix WebConsole将为您提供服务和组件的图形表示。它不会像您要求的那样直接为您提供根本原因,但它可以帮助有经验的用户比B
命令更快地追踪问题。