如何更改两个活动之间的主要任务?

时间:2015-01-07 12:43:55

标签: java android android-activity splash

我是Android的初级......所以我需要你的建议..

我有两项活动

A - > MainActivity

B - > LoadingActivity

我的问题是,

当我执行我的应用程序时,首先,A启动并且需要4秒才能执行数据库任务..所以我认为最好只为显示加载页面而制作另一个活动..

所以在MainActivity中,我写了这段代码

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    startActivity(new Intent(this, LoadingActivity.class));  <-- this
    setContentView(R.layout.activity_main);

我的意图是,应在此MainActivity启动之前启动LoadingActivity,以便LoadingActivity在屏幕上显示加载图像4秒以覆盖MainActivity数据库任务。

所以,我的预期序列是,

B(在屏幕上显示4秒) - &gt; A(开始几乎与B相同,在B活动屏幕后面工作) - &gt; B被杀死(call finish()方法) - &gt;比,使用该应用程序。

请给予任何建议,非常感谢..

而且,这是我的LoadingActivity类代码..

public class LoadingActivity extends FragmentActivity{

private static int SPLASH_TIME_OUT = 6000;
private String tag = "LoadingSplash";
@Override
protected void onCreate(Bundle savedInstanceState) {
   // TODO Auto-generated method stub
   super.onCreate(savedInstanceState);
   setContentView(R.layout.start_up);

   String localUrl ="file:///android_asset/loading_gif.gif";



   WebView wv=(WebView) findViewById(R.id.startup);

   //wv.getSettings().setJavaScriptEnabled(true);
   wv.getSettings().setPluginState(PluginState.ON);
   //wv.getSettings().setAllowFileAccess(true);
   Log.i(tag, "WebView get Setting finish....");

   wv.setPadding(0, 0, 0, 0);
   wv.setInitialScale(getScale());

   //wv.getSettings().setLoadWithOverviewMode(true);
   //wv.getSettings().setUseWideViewPort(true);
   wv.loadUrl(localUrl); 

   new Handler().postDelayed(new Runnable() {
       /*
        * Showing splash screen with a timer. This will be useful when you
        * want to show case your app logo / company
        */
       @Override
       public void run() {
           // This method will be executed once the timer is over
           // Start your app main activity      
           Log.i(tag, "Here is Runnable Method...");
           finish();
       }
   }, SPLASH_TIME_OUT);

    @SuppressLint("NewApi") 
    private int getScale(){
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    Point p = new Point();
    display.getSize(p);
    int width = p.x;
    Double val = new Double(width)/new Double(800);
    val = val * 100d;
    return val.intValue();
}
}

2 个答案:

答案 0 :(得分:0)

您可以使用Asynctask For Background处理。处理完成后,您可以开始下一个活动。您应该在异步任务上使用进度对话框:)

如果你不理解那么你可以问我......

此致 阿西

答案 1 :(得分:0)

您不需要两个单独的活动,您可以执行AsyncTask线程来执行您的数据库工作,并在&#34; onPreExecute&#34; AsyncTask类的方法开始显示你想要的自定义视图&#34;(可能包含progressBar)并在&#34; doInBackground&#34;方法和&#34; onPost&#34; AsyncTask类的方法只需设置&#34;所需的自定义视图&#34;对Gone的可见性。 希望这有效。