我有一个Android应用程序,我扩展了基础Application类,以便设置一些全局变量。
public class MyApplication extends Application {
private ArrayList<ModelClass> master_list; // global variable 1
private DataBaseHelper db_helper; // global variable 2
@Override
public void onCreate() {
super.onCreate();
//do database work that will take about 5 seconds
}
}
我希望在Application类工作时(即在创建主活动之前)向用户显示启动画面。有没有办法做到这一点?
答案 0 :(得分:5)
您可以将SplashActivity作为开始活动。
当MyApplication完成它的工作后,您可以开始主要活动并处理启动画面。
但是不要在onCreate中执行繁重的数据库工作,创建另一个函数并在那里执行,否则您的启动活动将不会显示。
public class SplashActivity extends Activity
@override
protected void onResume() {
//Create a thread
new Thread(new Runnable() {
public void run() {
//Do heavy work in background
((MyApplication)getApplication()).loadFromDb();
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish(); //End this activity
}
}).start();
}
}
答案 1 :(得分:3)
我在我的应用中执行此操作的方法是让您的主要活动扩展ActivityGroup。
public class App extends ActivityGroup {
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.splashscreen);
new Thread(new Runnable() {
public void run() {
// do your loading here
final LocalActivityManager lam = getLocalActivityManager();
runOnUiThread(new Runnable() {
public void run() {
Intent mainIntent = new Intent(MainActivity.class, App.this);
Window w = lam.startActivity("main", mainIntent);
setContentView(w.getDecorView());
}
}
}
}, "App loading thread").start();
}
}
这样,当应用程序恢复时,您立即获得应用程序,而不是启动画面,并且您只加载一次数据(当应用程序启动时)。
我实际上使用它来确保用户在应用程序启动时登录,如果用户名/密码组合不正确,我不会启动主应用程序,而是启动登录屏幕:)
答案 2 :(得分:0)
首先,我认为有很多方法可以使用闪屏。直观地说,我不会只是为了加载特定的信息而有一个特殊的类/活动,因为为了保留这些信息,你必须保持活动在某个地方保持活跃 - 占用资源。
我的启动画面只是一个布局,最初加载主活动的onCreate(),然后加载数据库信息后,将布局更改为主活动布局。
类似的东西:
public void onCreate() {
super.onCreate();
setContentView(R.layout.splashscreen);
//do database work that will take about 5 seconds
setContentView(R.layout.mainscreen)
}
答案 3 :(得分:0)
我意识到这是在提出这个问题后相当远但我希望有人发现这有用,如果需要我会提供代码。我的方法是在名为“finishedLoading”的应用程序类中创建一个公共布尔值。我将应用程序启动到我的启动画面活动中,并且我每隔250毫秒检查一次是否finishLoading = true,当它执行时,我启动新活动。另一个很好的部分是我有一个小旋转器进度条,所以用户看到发生的事情和动画四周。