【问题标题】:custom android.app.Application not firing onCreate event自定义 android.app.Application 未触发 onCreate 事件
【发布时间】:2011-10-15 01:10:14
【问题描述】:

我正在从 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();

【问题讨论】:

  • ctrl.onCreate(); 会为你做这件事...
  • 是的,确实如此。但这不应该自动触发吗?我也可以在构造函数中调用 onCreate(),但我认为这不是最优雅的解决方案。
  • 你应该调用 MyApplication 构造函数......你应该在清单 xml 中指向这个类,Android OS 应该调用它......和 ​​onCreate 也是
  • 我应该如何在 AndroidManifest 中声明一个从 Activity 调用的应用程序?默认情况下,应用程序标签已经添加到那里。
  • 为什么你需要扩展标准的Application类...

标签: java android events


【解决方案1】:

在您的AndroidManifest.xml 中添加关注

<application
    android:name="MyApplication"
    android:debuggable="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name">
</application>

那么你的onCreate() 将被解雇。

【讨论】:

  • 它不起作用。我将主 Activity 定义为 AndroidManifest.xml 中的错误和此附加应用程序标记的应用程序。你认为这是正确的吗?
  • @BalajiKhadake 我的应用程序类从库应用程序类扩展而来,并且库中的 onCreate 不会触发!
  • 必须在 android:name 中添加类名,如 android:name="your.package.com.MyApplication"。
【解决方案2】:

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

【讨论】:

  • 老兄。你可能用这个答案为我节省了几个小时。谢谢。
【解决方案3】:

非常简单

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

示例:

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

【讨论】:

    【解决方案4】:

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

    例如来自Activity:

    MyApplication ctrl = (MyApplication)getApplicationContext();
    

    更多信息: Context.getApplicationContext()

    文档说onCreate()

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

    【讨论】:

    • 对我也不起作用。实际上应用程序在这一行崩溃了。
    • 您建议的行:MyApplication ctrl = (MyApplication)getApplicationContext();
    • 谢谢。这里的问题是我还应该在 AndroidManifest.xml 中声明该应用程序,但是根据 Balaji 的回复和 cmets,我不能在那里定义 2 个应用程序。你能想出解决办法吗?
    【解决方案5】:

    您实际上并没有使用newoperator 创建您的活动实例。相反,您可以像这样开始一个 Intent:

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

    当使用new 操作符创建对象时,onCreate 永远不会被调用。

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

    [EDIT2] 您可以创建一个返回应用程序的静态方法,如下所示:

    public static MyApplication getApp() {
        return mInstance;
    }
    

    [/EDIT2]

    【讨论】:

    • 这不是 Activity 它是应用程序
    • 哎呀,我的错。但这也适用于应用程序。如果您使用 new 运算符创建应用程序,则不会调用 onCreate。
    • 是的,我这样做了,但我需要能够获取对象实例才能设置对象属性并调用其方法。
    • 你可以创建一个静态方法来返回这个应用程序的单例。
    • 你不能从静态方法返回 this -_-
    【解决方案6】:

    正如 Balaji 提到的,如果您在应用程序标签下提到类名后仍然面临问题

    <application
        android:name="MyApplication"
        android:debuggable="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"> </application>
    

    然后试试这个:

    尝试禁用 Instant Run,然后清理项目并重建它,然后再次运行。 它对我有用。 谢谢。

    【讨论】:

      【解决方案7】:

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

      Tag= 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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        • 2018-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多