扩展Application类的类是否可以在Android中调用?

5

我有一个继承自Application的类,我想从代码中调用它,这个类有

@Override
public void onCreate() 

我需要从Activity中调用这个函数。当应用程序启动时,我知道如何调用它,因此我需要在清单中包含:

 android:name=""

谢谢。
5个回答

13

应避免手动调用应用程序的onCreate方法,因为如果一切配置正确,它会自动启动。但是,如果您想从重写的Application中调用方法,可以按照以下方式进行:

public class MyApplication extends Application{
    public void someMethod(){}
}

接着在任何活动中:

MyApplication app = (MyApplication)getApplication()
app.someMethod();

我遇到了这个异常 java.lang.ClassCastException: android.app.Application - Streetboy
那么你没有在清单文件中注册你的应用程序。 - Rafael T
然后,您可以尝试在项目清单中声明Library Application.class。不确定这是否有效,但至少对于Activitys有效。还要查看此内容:http://stackoverflow.com/questions/9499044/writing-an-android-library-using-its-own-custom-application-class-getapplicat - Rafael T
你的意思是说,如果这个类MyApplication在Library项目中,并且在使用该库的项目中声明了像这样的清单 android:name="MyApplication",那么这个方法不起作用 :) - Streetboy
@Streetboy,你应该使用完全限定的应用程序名称,而不仅仅是类名。 - Rafael T

3
尝试这个:
public class YourApplication extends Application 
{     
     public void sayHello {
        System.out.println("Hello")
    }
}

然后在任何活动中通过以下方式调用:

YourApplication appState = ((YourApplication)this.getApplication());
appState.sayHello();

2

应用程序类onCreate()在应用程序启动时被调用。如果你想调用你在应用程序类中声明的方法,可以像这样调用它:

((Application_Class_Name)getApplicationContext()).calling_method();

如果从扩展Activity的其他类中调用,您需要使用上下文获取getApplicationContext()实例以从非Activity类调用。

例如- 如果您想从Adapter类调用它,则需要将Activity的上下文传递给Adapter类并获取Application的实例,

((Application_Class_Name)mContext.getApplicationContext()).calling_method();

0

Activity 中,你可以简单地调用 ((YourAppName)getApplicationContext())

此外,在你的 Application 中,你不需要 onCreate()(除非你知道你需要)。你可以在那里设置一些方法,然后使用例如 ((YourAppName)getApplicationContext()).myMethod() 调用它们。只要它的任何一个活动还活着,你的应用程序就是活着的。


你确定 getApplicationContext() 返回的是和 getApplication() 相同的内容吗? - Rafael T
1
说实话,我从来没有听说过getApplication()。在我的应用程序中,我使用getApplicationContext(),它非常好用。顺便说一下,有很多答案出现了;) - Michał Klimczak

0
你不应该自己调用 onCreate() 方法...Android 会为你调用...这样的类的主要目的是保持整个应用程序共同使用的全局变量,因为 Application 本身是单个实例...

而且它允许你覆盖 onCreate() 方法,因为你可能需要在操作系统创建的应用程序/Activity 中添加自定义内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接