Java Oncreate在显示活动之前等待所有方法的完成
我正在尝试为我的android应用程序显示一个简介,初始化此简介的方法是从主活动的Java Oncreate在显示活动之前等待所有方法的完成,java,android,android-studio,java-threads,Java,Android,Android Studio,Java Threads,我正在尝试为我的android应用程序显示一个简介,初始化此简介的方法是从主活动的onCreate()方法调用的,当我在显示简介活动的方法上设置断点时进行调试,在我的设备中显示主活动 有什么办法可以防止这种情况发生吗 主要活动: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { validateFirst
onCreate()
方法调用的,当我在显示简介活动的方法上设置断点时进行调试,在我的设备中显示主活动
有什么办法可以防止这种情况发生吗
主要活动:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
validateFirstTime();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private void validateFirstTime() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// Initialize SharedPreferences
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
// Create a new boolean and preference and set it to true
boolean isFirstStart = getPrefs.getBoolean("firstStart", true);
// If the activity has never started before...
if (isFirstStart) {
// Launch app intro
final Intent i = new Intent(MainActivity.this, IntroActivity.class);
runOnUiThread(new Runnable() {
@Override
public void run() {
startActivity(i);
}
});
// Make a new preferences editor
SharedPreferences.Editor e = getPrefs.edit();
// Edit preference to make it false because we don't want this to run again
e.putBoolean("firstStart", true);
// Apply changes
e.apply();
}
}
});
// Start the thread
t.start();
}
我将断点放在validateFirstTime()方法的if语句中,
在恢复断点之前,活动已显示在te设备中
为什么?这是因为
validateFirstTime()
中的代码运行在与以下代码不同的线程上:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
它正在主线程上运行
您可以通过将代码移出线程来解决此问题,如下所示:
private void validateFirstTime() {
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
// Create a new boolean and preference and set it to true
boolean isFirstStart = getPrefs.getBoolean("firstStart", true);
// If the activity has never started before...
if (isFirstStart) {
// Launch app intro
Intent i = new Intent(MainActivity.this, IntroActivity.class);
startActivity(i);
// Make a new preferences editor
SharedPreferences.Editor e = getPrefs.edit();
// Edit preference to make it false because we don't want this to run again
e.putBoolean("firstStart", false);
// Apply changes
e.apply();
} else {
setContentView(R.layout.activity_main);
}
}
private boolean isFirstTimeUsage() {
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
// Create a new boolean and preference and set it to true
boolean isFirstStart = getPrefs.getBoolean("firstStart", true);
// If the activity has never started before...
if (isFirstStart) {
// Make a new preferences editor
SharedPreferences.Editor e = getPrefs.edit();
// Edit preference to make it false because we don't want this to run again
e.putBoolean("firstStart", false);
// Apply changes
e.apply();
}
return isFirstStart;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean isFirstTime = isFirstTimeUsage();
if(isFirstTime) {
// Launch app intro
Intent i = new Intent(MainActivity.this, IntroActivity.class);
startActivity(i);
} else {
setContentView(R.layout.activity_main);
}
}
然后在onCreate()
中,您可以使用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
validateFirstTime();
}
或者,您可以使用一种更简单的方法,将所有第一次检查移动为如下方法:
private void validateFirstTime() {
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
// Create a new boolean and preference and set it to true
boolean isFirstStart = getPrefs.getBoolean("firstStart", true);
// If the activity has never started before...
if (isFirstStart) {
// Launch app intro
Intent i = new Intent(MainActivity.this, IntroActivity.class);
startActivity(i);
// Make a new preferences editor
SharedPreferences.Editor e = getPrefs.edit();
// Edit preference to make it false because we don't want this to run again
e.putBoolean("firstStart", false);
// Apply changes
e.apply();
} else {
setContentView(R.layout.activity_main);
}
}
private boolean isFirstTimeUsage() {
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
// Create a new boolean and preference and set it to true
boolean isFirstStart = getPrefs.getBoolean("firstStart", true);
// If the activity has never started before...
if (isFirstStart) {
// Make a new preferences editor
SharedPreferences.Editor e = getPrefs.edit();
// Edit preference to make it false because we don't want this to run again
e.putBoolean("firstStart", false);
// Apply changes
e.apply();
}
return isFirstStart;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean isFirstTime = isFirstTimeUsage();
if(isFirstTime) {
// Launch app intro
Intent i = new Intent(MainActivity.this, IntroActivity.class);
startActivity(i);
} else {
setContentView(R.layout.activity_main);
}
}
然后,您可以使用onCreate
中的方法进行如下操作:
private void validateFirstTime() {
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
// Create a new boolean and preference and set it to true
boolean isFirstStart = getPrefs.getBoolean("firstStart", true);
// If the activity has never started before...
if (isFirstStart) {
// Launch app intro
Intent i = new Intent(MainActivity.this, IntroActivity.class);
startActivity(i);
// Make a new preferences editor
SharedPreferences.Editor e = getPrefs.edit();
// Edit preference to make it false because we don't want this to run again
e.putBoolean("firstStart", false);
// Apply changes
e.apply();
} else {
setContentView(R.layout.activity_main);
}
}
private boolean isFirstTimeUsage() {
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
// Create a new boolean and preference and set it to true
boolean isFirstStart = getPrefs.getBoolean("firstStart", true);
// If the activity has never started before...
if (isFirstStart) {
// Make a new preferences editor
SharedPreferences.Editor e = getPrefs.edit();
// Edit preference to make it false because we don't want this to run again
e.putBoolean("firstStart", false);
// Apply changes
e.apply();
}
return isFirstStart;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean isFirstTime = isFirstTimeUsage();
if(isFirstTime) {
// Launch app intro
Intent i = new Intent(MainActivity.this, IntroActivity.class);
startActivity(i);
} else {
setContentView(R.layout.activity_main);
}
}