我想在每次启动任何活动或服务时运行一段代码。在这段代码中,我可能会做一些事情,例如设置默认的未捕获异常处理程序和管理日志级别。
问题是我有一个活动,从用户点击应用程序图标开始。我有另一个,如果某个意图被广播,可能来自另一个应用程序,并可能在用户点击启动图标之前调用。服务也一样。
我需要保证在保持代码清洁的同时运行某段代码;也就是说,无需手动将该代码片段添加到我拥有的每个活动和服务类中。
答案 0 :(得分:4)
你能不能像这样扩展Android的基本Activity类:
public class MyClass extends Activity {
public void onCreate(Bundle bundle) {
//Add custom code here
}
}
然后让您的应用程序中的所有实际“活动”扩展自定义类?
public class MyInterfaceClass extends MyClass {
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
//Other code here
}
}
这样,当Activity启动时,将调用所有自定义代码。
答案 1 :(得分:2)
对于名为Wibble的应用程序......
public class Wibble extends Application {
protected static void DoSomething()
{
// Do your common code here
}
}
然后扩展活动......
public class WibbleActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Wibble.DoSomething();
}
}
然后从WibbleActivity派生所有活动类......
public class Whatever extends WibbleActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// WibbleActivity calls Wibble.DoSomething()
// so the 'Whatever' class doesn't have to.
}
}
从WibbleActivity派生的任何Activity都将隐式运行Wibble.DoSomething()。
如果你想要混合中的服务我无能为力 - 我是一个Android'新手'并且尚未接受服务但我怀疑扩展你自己的应用级服务类可能会以同样的方式工作
答案 2 :(得分:1)
您可以扩展Application
并在其onCreate()方法中执行此操作。
答案 3 :(得分:0)
您有两个选择
A)您可以手动添加代码 - 它可能只有两行从您未经修改的源文件中导入和实例化某些内容 - 到您编写的每个单独组件。它只会在你的项目中,而不是在其他人的项目中,除非他们也这样做。
B)你可以在不小的困难之后学会制作自己的自定义版本的android,每次启动合适的组件时自动执行此操作,并在开发者手机或黑客用户手机上安装此自定义版本。
答案 4 :(得分:0)
“开始”是模棱两可的 - 你指的是什么?的onCreate?的onResume?
在任何情况下,你最好的选择是让一个单独的类使用一个静态方法来执行你正在谈论的代码,然后你在每一个onCreate(或者onResume,无论你需要哪个)中调用它们。活动。
那,或者您创建自己的Activity
子类并从中派生所有活动,并覆盖onCreate
(或onResume)。所有的onCreate / onResume实现都需要调用超类的实现,所以你可以保证你的代码被强制执行。