Java 从其他onCreate方法启动一个活动 问题描述
我正在编写Android应用程序,它包含两个活动:Java 从其他onCreate方法启动一个活动 问题描述,java,android,android-activity,oncreate,Java,Android,Android Activity,Oncreate,我正在编写Android应用程序,它包含两个活动:MainActivity和SplashActivity。当MainActivity启动时,加载UI需要一些时间,而且它正在后台执行一些工作。因此,为了不显示不完整的UI(白色屏幕等),我决定启动我的MainActivity并在其onCreate()方法startSplashActivity中右键启动SplashActivity,并在一段时间后关闭SplashActivity,因此我假设此时我的MainActivity将已经加载。因此,我尝试了下面
MainActivity
和SplashActivity
。当MainActivity
启动时,加载UI需要一些时间,而且它正在后台执行一些工作。因此,为了不显示不完整的UI(白色屏幕等),我决定启动我的MainActivity
并在其onCreate()
方法startSplashActivity
中右键启动SplashActivity
,并在一段时间后关闭SplashActivity
,因此我假设此时我的MainActivity
将已经加载。因此,我尝试了下面的代码:
代码
在清单文件中,作为启动器
活动被设置为main活动
。该代码如下所示:
main活动
显示main时,活动
splash活动
出现在前面main活动
从“后台”开始splash活动
走到前面,过一段时间后自行关闭您可以在MainActivity中启动一个对话框。它将显示在MainActivity前面,您可以在后台完成工作后关闭它
请参见此处:您的任务可以通过在一个活动中使用片段或视图来解决。 在活动的onCreate()方法中,可以显示SplashFragment。当所有后台工作完成后,您可以将其替换为MainFragment。使用不同的视图(设置它们的可见性)也可以实现同样的效果 例如:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
SplashFragment splashFragment = new SplashFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container,splashFragment).commit();
}
public void onLoad(){
MainFragment mainFragment = new MainFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container,mainFragment).commit();
}
}
无论如何。如果您想使用活动,您需要在SplashActivity中使用您的后台作业的侦听器。您应该使用startActivityForResult()启动Splash活动。作业完成后,您应该完成SplashActivity并继续在MainActivity中的onActivityResult()方法中处理。您可以使用
异步任务。首先启动splash活动
,加载所有必要的数据后,启动main活动
。试着这样做:
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// Load your data here
return null;
}
@Override
protected void onPostExecute(Void result) {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
}
};
asyncTask.execute(null, null);
}
}
公共类SplashActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
AsyncTask AsyncTask=新建AsyncTask(){
@凌驾
受保护的Void doInBackground(Void…参数){
//在这里加载数据
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
startActivity(新意图(SplashActivity.this、MainActivity.class));
完成();
}
};
asyncTask.execute(null,null);
}
}
您可以先启动启动屏幕,然后导航到MainActivity,如下所示:
public class SplashScreen extends Activity {
int timeout = 5000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashScreen.this, MainActivity.class);
startActivity(i);
finish();
}
}, timeout);
}
}
开始你的喷溅吧
没有历史意图标志或在清单中定义android:noHistory for ur splah活动您可以遵循。这不会有帮助,因为我在UI方面有很多问题。UI未显示正确的白色屏幕显示了一段时间,之后显示良好的屏幕。
public class SplashScreen extends Activity {
int timeout = 5000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashScreen.this, MainActivity.class);
startActivity(i);
finish();
}
}, timeout);
}
}