从其他 onCreate 方法启动一个 activity
Start one activity from other onCreate method
问题描述
我正在编写 Android 应用程序,其中包含两个活动:MainActivity
和 SplashActivity
。当 MainActivity
启动时,它需要一些时间来加载 UI 并且它还在后台做一些工作。因此,为了不显示不完整的 UI(白屏等),我决定启动我的 MainActivity
并在其 onCreate()
方法中启动 SplashActivity
并在一段时间后关闭 SplashActivity
所以我假设那时我的 MainActivity
已经加载。为此,我尝试了以下代码:
代码
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
Intent intent = new Intent(LoginActivity.this, SetPassword.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
.........
}
}
在清单文件中设置了 LAUNCHER
activity MainActivity
。此代码如下:
显示 MainActivity
。
- 当我关闭时
MainActivity
SplashActivity
来到前面
但我需要以下行为
MainActivity
开始于 'background'
SplashActivity
来到前面,一段时间后自行关闭
- `MainActivty' 已经加载到前面。
您可以在 MainActivity 中启动一个对话框。它会出现在 MainActivity 前面,您可以在后台工作完成后将其关闭。
看这里:Dialog
您的任务可以通过在一个 activity 中使用片段或视图来解决。
在 activity 的 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();
}
}
任何方式。如果你想使用 activity,你需要在 SplashActivity 中使用你后台作业的监听器。您应该使用 startActivityForResult() 启动 SplashActivity。工作完成后,您应该完成 SplashActivity 并在 MainActivity 的 onActivityResult() 方法中继续处理。
您可以使用 AsyncTask
。首先启动 SplashActivity
,当所有必要的数据加载完毕后,启动 MainActivity
。尝试这样的事情:
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);
}
}
您可以先启动初始屏幕,然后导航到 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);
}
}
开始你的飞溅
NO_HISTORY 意图标志或在清单中定义 android:noHistory 为你的 splah activity
问题描述
我正在编写 Android 应用程序,其中包含两个活动:MainActivity
和 SplashActivity
。当 MainActivity
启动时,它需要一些时间来加载 UI 并且它还在后台做一些工作。因此,为了不显示不完整的 UI(白屏等),我决定启动我的 MainActivity
并在其 onCreate()
方法中启动 SplashActivity
并在一段时间后关闭 SplashActivity
所以我假设那时我的 MainActivity
已经加载。为此,我尝试了以下代码:
代码
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
Intent intent = new Intent(LoginActivity.this, SetPassword.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
.........
}
}
在清单文件中设置了 LAUNCHER
activity MainActivity
。此代码如下:
-
显示
MainActivity
。- 当我关闭时
MainActivity
SplashActivity
来到前面
但我需要以下行为
MainActivity
开始于 'background'SplashActivity
来到前面,一段时间后自行关闭- `MainActivty' 已经加载到前面。
您可以在 MainActivity 中启动一个对话框。它会出现在 MainActivity 前面,您可以在后台工作完成后将其关闭。
看这里:Dialog
您的任务可以通过在一个 activity 中使用片段或视图来解决。 在 activity 的 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();
}
}
任何方式。如果你想使用 activity,你需要在 SplashActivity 中使用你后台作业的监听器。您应该使用 startActivityForResult() 启动 SplashActivity。工作完成后,您应该完成 SplashActivity 并在 MainActivity 的 onActivityResult() 方法中继续处理。
您可以使用 AsyncTask
。首先启动 SplashActivity
,当所有必要的数据加载完毕后,启动 MainActivity
。尝试这样的事情:
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);
}
}
您可以先启动初始屏幕,然后导航到 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);
}
}
开始你的飞溅 NO_HISTORY 意图标志或在清单中定义 android:noHistory 为你的 splah activity