有没有办法在实例化后拦截Android Activity?

时间:2011-01-22 23:06:49

标签: android android-activity instantiation

每当Application创建一个新的Activity实例时,有没有办法拦截?我只对属于应用程序进程的活动感兴趣,而不是对手机上的所有活动感兴趣。有办法做到这一点吗? Application类是否以某种方式参与了此操作?在创建Activity实例后,我可以覆盖哪些方法来获取它?

1 个答案:

答案 0 :(得分:2)

好的,只是一个想法 - 在您的应用程序中,您可以创建一个基本活动类,以便所有其余活动都从该基本活动创建子类。然后在onCreate()回调中,您可以通知某个侦听器实例有关新应用程序活动实例创建的事实:

public class BaseActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // put the code to notify a listener here
    }

}

public class YourWorkingActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
    }
}

如果你使用ListActivity(这对于普通的Android应用来说很常见),那么你也应该为它创建一个类似的BaseListActivity。

最有可能听众的最佳候选者是Application子类,因为操作系统会保证在实例化任何Activity之前创建它。

警告:您应避免在侦听器中保留对活动的强引用,因为当操作系统尝试终止该活动时,它会创建内存泄漏(作为活动或进程的一部分)生命周期)。可能会使用WeakReference