代码之家  ›  专栏  ›  技术社区  ›  Gallal

如何总是在android中运行一些代码,而不管哪个活动或服务首先在android中运行?

  •  1
  • Gallal  · 技术社区  · 14 年前

    我想在每次启动任何活动或服务时运行一段代码。在这段代码中,我可以做一些事情,比如设置默认的未捕获异常处理程序和管理日志级别。

    问题是,我有一个活动是从用户单击应用程序图标开始的。我有另一个启动,如果某个意图是广播,可能从另一个应用程序,并可能调用之前,用户点击启动图标。服务业也是如此。

    我需要保证在保持代码干净的同时运行某段代码;也就是说,无需手动将该代码片段添加到我拥有的每个活动和服务类中。

    5 回复  |  直到 14 年前
        1
  •  2
  •   Squonk    14 年前

    对于名为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派生的任何活动都将隐式运行Wibble.DoSomething()。

    如果你想要混合服务,我帮不上忙——我是一个Android“新手”,还没有接触到服务,但我怀疑扩展你自己的应用程序级服务类可能也会有同样的效果。

        2
  •  4
  •   SpencerElliott    14 年前

    不能像这样扩展Android的基本活动类:

    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
        }
    }
    

    这样,当活动启动时,将调用所有自定义代码。

        3
  •  1
  •   Nathan Schwermann    14 年前

    你可以延长 Application 并在其onCreate()方法中执行。

        4
  •  0
  •   Chris Stratton    14 年前

    你有两个选择

    A)您可以手动将代码添加到您编写的每个单独组件中,这可能只是两行代码,从您未经修改复制的源文件导入和实例化某些内容。它只会出现在你的项目中,而不会出现在其他人的项目中,除非他们也这么做。

    B)你可以在不小的困难之后,学会制作自己的自定义版本的android,每次它启动一个合适的组件时都会自动这样做,并将这个自定义版本安装在开发者手机或黑客消费手机上。

        5
  •  0
  •   EboMike    14 年前

    “开始”是模棱两可的-你指的是什么?一次创建?继续?

    在任何情况下,您最好的选择是使用一个独立的类和一个静态方法来执行您正在讨论的代码,并在每个活动的每个onCreate(或onResume,无论您需要什么)中调用它。

    或者你自己创造 Activity 子类化并从中派生所有活动,然后重写 onCreate (或继续)。所有onCreate/onResume实现都需要调用超类的实现,因此您的代码一定要按比例缩放。