自定义android.app.Application没有触发onCreate事件

时间:2011-07-28 11:26:39

标签: java android events

我从android.app.Application派生自定义应用程序,我无法触发其onCreate事件。这是实现

import android.app.Application;

public class MyApplication extends Application {

    public MyApplication() {
        super();
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }
}

以下是我使用它的方式:

MyApplication ctrl = new MyApplication();

7 个答案:

答案 0 :(得分:78)

AndroidManifest.xml

中添加以下内容
<application
    android:name="MyApplication"
    android:debuggable="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name">
</application>

然后你的onCreate()会被解雇。

答案 1 :(得分:4)

非常简单

AndroidManifest.xml内的application标记内,输入Application子类的名称及其android:name属性下的路径。

示例:

<application
...
android:name=".models.custom.BaseApplication"
...
> ... </application>

答案 2 :(得分:1)

不要构建它,从Context获取它。

例如来自Activity

MyApplication ctrl = (MyApplication)getApplicationContext();

更多信息: Context.getApplicationContext()

文档说明onCreate()

  

在应用程序启动时,在任何其他应用程序之前调用   对象已创建

答案 3 :(得分:1)

您实际上并未使用new运算符创建活动的实例。相反,你开始这样的意图:

Intent start = new Intent(context, Classname.class);
context.startActivity(start);

使用new运算符创建对象时,永远不会调用onCreate

[编辑]使用new运算符onCreate创建应用程序时,不会调用[/ EDIT]

[EDIT2]你可以创建一个静态方法来返回这样的应用程序:

public static MyApplication getApp() {
    return mInstance;
}

[/ EDIT2]

答案 4 :(得分:0)

正如Balaji所提到的,即使在应用标签

下提及班级名称后仍然面临问题
<application
    android:name="MyApplication"
    android:debuggable="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name"> </application>

然后试试这个:

尝试并禁用“即时运行”,然后清理项目并重建它,然后重新运行。 它对我有用。 感谢。

答案 5 :(得分:0)

我遇到了这个问题,发现就我而言,整个问题都在电话方面。我重启了手机,这解决了问题。

答案 6 :(得分:0)

在清单文件中确保你已经添加了标签,即扩展应用程序的类。

标签= android:name=".MyApplication

清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.services">
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Services">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!--Declaring the Service in the manifest file-->
        <service
            android:name=".MyServiceDemo"
            android:foregroundServiceType="dataSync" />
    </application>
</manifest>

MyApplication.java(即扩展 Applicatoin 的类)

package com.example.services;

import android.app.Application;

public class MyApplication extends Application {

    private static MyAppsNotificationManager notificationManager;

    @Override
    public void onCreate() {
        super.onCreate();
        notificationManager = MyAppsNotificationManager.getInstance(this);
        notificationManager.registerNotificationChannelChannel(
                getString(R.string.channelId),
                "BackgroundService",
                "BackgroundService");
    }

    public static MyAppsNotificationManager getMyAppsNotificationManager(){
        return notificationManager;
    }
}