Pau*_*ega 14 android android-manifest
我已经写了一些Android应用程序,并且总是声明一个起点Activity:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
如果我可以使用一个在设置prefs等Application之后调用第一个应用程序来启动我的应用程序,这对于确定一些全局方法,静态,共享首选项等是Activity很好的onCreate(),但是我还没有找到任何示例这个设计模式......当我在代码中尝试这个时,我得到一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
InitialActivity.class确实是一个Activity可以正常工作,如果我设置它MAIN,但尝试从它启动它MyApplication被声明MAIN生成错误.可能是一个非常愚蠢的问题,但我是否解决了这一切?
谢谢,
保罗
ina*_*ruk 21
您可以使用FLAG_ACTIVITY_NEW_TASK标志来解决此问题:
Intent intent = new Intent(this, ApplicationActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
这是因为当Activity在Activity上下文之外启动时,您需要启动新任务.但我强烈建议不要从您的应用程序启动Activity onCreate().
Android有4个组件:Activity,Service,ContentProvider和Broadcast.
当Android需要从您的应用程序激活其中一个组件时,它会查看您的应用程序是否已存在正在运行的进程.如果没有,那么Android启动新进程,初始化它,然后初始化您的自定义应用程序实例.然后它激活所需组件之一.
现在,让我们考虑下一个场景:您的应用程序声明内容提供程序AndroidManifest.xml,Android即将启动您的应用程序,以便您可以向另一个前台应用程序提供一些数据.
Application.onCreate() 叫做.有人只想连接到您的内容提供商,但您的应用程序启动了一个Activity.对于启动后台服务和有时广播接收器也是如此.
并且还要考虑一些其他应用程序的活动A是否想要从您的应用程序启动活动X. 但是在onCreate()你开始活动Y,然后X也是由Android启动的.然后用户按下.应该怎么办?这很棘手...
从Application's 开始活动onCreate可能会导致非常奇怪的用户体验.所以不要这样做.
更新: 因为Android保证Application只会创建一次,并且在任何其他组件之前,您可以使用下一个代码来访问Application的单个实例:
public class MyApplication extends Application
{
private static MyApplication s_instance;
public MyApplication()
{
s_instance = this;
}
public static MyApplication getApplication()
{
return s_instance;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19451 次 |
| 最近记录: |