自定义 android.app.Application 未触发 onCreate 事件
Posted
技术标签:
【中文标题】自定义 android.app.Application 未触发 onCreate 事件【英文标题】:custom android.app.Application not firing onCreate event 【发布时间】: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类...
【参考方案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(); ***.com/questions/708012/… 谢谢。这里的问题是我还应该在 AndroidManifest.xml 中声明该应用程序,但是根据 Balaji 的回复和 cmets,我不能在那里定义 2 个应用程序。你能想出解决办法吗?【参考方案5】:您实际上并没有使用new
operator 创建您的活动实例。相反,您可以像这样开始一个 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;
【讨论】:
以上是关于自定义 android.app.Application 未触发 onCreate 事件的主要内容,如果未能解决你的问题,请参考以下文章