Android应用程序vs活动

前端之家收集整理的这篇文章主要介绍了Android应用程序vs活动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经写了几个 Android应用程序,并且一直声明开始的活动是:
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

如果我可以使用应用程序启动我的应用程序,然后在设置prefs等之后从其onCreate()调用第一个Activity,但是我还没有能够启动我的应用程序,这将是非常好的范围一些全局方法,静态,共享prefs等找到这个设计模式的任何例子…当我在代码中尝试这个,我得到一个ClassCastException:

public class MyApplication extends Application {
@Override
    public void onCreate() {
        super.onCreate();

        // do stuff (prefs,etc)

        // start the initial Activity
        Intent i = new Intent(this,InitialActivity.class);
    startActivity(i);
    }
}

InitialActivity.class确实是一个Activity,如果我将其设置为MAIN,则可以正常运行,但尝试从MyApplication启动它,该对象被声明为MAIN生成错误.可能是一个非常愚蠢的问题,但我是否正在处理这一切?

谢谢,

保罗

解决方法

您可以使用FLAG_ACTIVITY_NEW_TASK标志来修复此问题:
Intent intent = new Intent(this,ApplicationActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

这是因为在Activity上下文中启动Activity时需要启动新任务.但是我强烈建议您不要从应用程序的onCreate()启动Activity.

Android有4个组件:Activity,Service,ContentProvider和Broadcast.

当Android需要从您的应用程序激活这些组件之一时,会看到应用程序是否已经存在正在运行的进程.如果没有,Android将启动新进程,初始化它,然后初始化您的自定义应用程序实例.然后它激活所需的组件之一.

现在,让我们考虑下一个场景:您的应用程序在AndroidManifest.xml中声明内容提供程序,Android即将启动应用程序,以便您可以向另一个前台应用程序提供一些数据.

>发送内容提供者请求
>您的应用程序未运行,Android启动新的进程.
>您的自定义应用程序实例已创建
> Application.onCreate()被调用.
>你开始一个活动
>您的内容提供商接收请求

有人只想连接到您的内容提供商,但您的应用程序开始了一个活动.启动后台服务和有时广播接收器也是如此.

并且还要考虑一下其他应用程序的活动A是否想要从你的应用程序开始活动X.但是在onCreate()中,您开始活动Y,然后X也由Android启动.然后用户按下.应该怎么办这很棘手…

从应用程序的onCreate开始的活动可能会导致相当奇怪的用户体验.所以不要这样做

更新:
因为Android保证应用程序只能在任何其他组件之前创建一次,您可以使用下一个代码来访问应用程序的单个实例:

public class MyApplication extends Application 
{   
    private static MyApplication s_instance;

    public MyApplication()
    {
        s_instance = this;
    }

    public static MyApplication getApplication()
    {
        return s_instance;
    }
}
原文链接:https://www.f2er.com/android/312895.html

猜你在找的Android相关文章