【问题标题】:Delay after the splash screen启动画面后的延迟
【发布时间】:2013-07-22 09:39:02
【问题描述】:

我的问题是,如果我通过在清单中添加这一行将启动画面设置为 Dialog,则会出现延迟:android:theme="@android:style/Theme.Holo.Dialog.NoActionBar"

启动画面消失后,主要活动大约需要 6 秒或更长时间才会出现。

我怎样才能让这种延迟消失?

启动代码:

public class SplashActivity extends Activity {
private final int DURATION = 3000;
private Thread mSplashThread;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    mSplashThread = new Thread() {

        @Override
        public void run() {
            synchronized (this) {
                try {
                    wait(DURATION);
                } catch (InterruptedException e) {
                } finally {
                    finish();
                    Intent intent = new Intent(getBaseContext(),
                            MainActivity.class);
                    startActivity(intent);
                }
            }
        }

    };
mSplashThread.start();

}

    @Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        synchronized (mSplashThread) {
            mSplashThread.notify();
        }
    }
    return true;
}

}

【问题讨论】:

  • 您是否使用延迟的Handler
  • 不,如果我只是从清单中删除该行,那么任何地方都不会延迟。只有当我添加该行时才能将我的启动画面视为一个对话框。
  • 发布您的启动画面代码
  • 我已经添加它来编辑主消息

标签: android dialog delay splash-screen


【解决方案1】:

您可以在启动屏幕活动中完成所有后台工作,然后开始您的主要活动,而不是使用启动画面作为对话。如果您需要对话动画,那么您可以使用这样的动画。

overridePendingTransition(R.anim.come_up, R.anim.go_down);

通过这个你可以管理你的活动切换时间。

【讨论】:

  • 我需要我的启动画面看起来像一个对话框(移动屏幕中间的小窗口)。
  • 我认为您没有使用启动画面来下载数据。如果是这样,那么为什么不开始主要活动并在 onCreate() 中进行启动画面对话,然后覆盖 onBackpress() 以便您的对话可以随时关闭。
  • 对不起,你有这方面的例子吗?我刚开始使用android
  • 在你的新编辑代码中调用finish();在开始活动(意图)之后; .我认为这也可以解决您的问题。
【解决方案2】:

我不确定这个答案是否合适,但我已经这样做了:

    @Override
    public void run() 
    {
        // TODO Auto-generated method stub
        startActivity( new Intent ( SplashActivity.this , MainActivity.class ) ) ;
    }

    @Override
    protected void onStart() 
    {
        super.onStart();
        if(!isClosed)
            splashHandler.postDelayed(this, "putYourTimeHere");
    }

【讨论】:

  • putYourTimeHere = 1000(1000 == 1 秒)
  • 所以,这会在我的启动后设置延迟,对吧?问题是我有一个延迟,我不想在启动后有任何延迟,
【解决方案3】:

这对我来说是最好的..

final int splashTimeOut = 3000;

    Thread splashThread = new Thread(){
                int wait = 0;
                @Override
                public void run() {
                    try {
                        super.run();
                        while(wait < splashTimeOut){
                            sleep(100);
                            wait += 100;
                        }
                    } catch (Exception e) {
                    }finally{
    startActivity(new Intent(SplashScreen.this,LoginActivity.class));
                        finish();
                    }
                }
            };
            splashThread.start();

【讨论】:

    【解决方案4】:

    这是带有一些时间延迟的闪屏显示代码 .. 这里在 splash_screen.xml 中的 drawable 中设置启动图像。

     import android.location.Criteria;
     import android.location.Location;
     import android.location.LocationListener;
     import android.location.LocationManager;
     import android.os.Build;
     import android.os.Bundle;
     import android.os.Handler;
     import android.telephony.TelephonyManager;
     import android.util.Log;
     import android.view.Window;
     import android.widget.Toast;
     import android.annotation.SuppressLint;
     import android.app.Activity;
     import android.content.Context;
     import android.content.Intent;
    
    public class SplashScreen extends Activity  {
    
    LocationManager locationManager;
    String provider, formattedDate, imeid;
    double lat, lon;
    
    
    
    @SuppressLint("NewApi")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        requestWindowFeature(Window.FEATURE_NO_TITLE);
    
        setContentView(R.layout.splash_screen);
    
        Calendar c = Calendar.getInstance();
         SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
            formattedDate = df.format(c.getTime());
    
    
    
        new Handler().postDelayed(new Runnable() {
            public void run() {
                Log.i("JO", "run");
                Intent in = new Intent(SplashScreen.this,SecondActivity.class);
                //in.putExtra("refreshclick", clickRefreshButton);
                //in.putExtra("Current_Date", formattedDate);
            //  in.putExtra("ImeiId", imeid);
    //Log.i("JO", "Current_Date"+formattedDate+";
         ImeiId"+imeid+";lat"+lat+"lon"+lon);
                startActivity(in);
    
                finish();
            }
        }, 1000);
    
    }
    
    
    
        }
    

    【讨论】:

    • 所以,这会在我的启动后设置延迟,对吗?问题是我有一个延迟,我不想在启动后有任何延迟,
    • 以上不是闪屏显示后的延迟,它只是显示高于指定时间的闪屏..
    【解决方案5】:
    new Handler().postDelayed(new Runnable() {
    
                @Override
                public void run() {
    
                    Intent i = new Intent(SplashActivity.this, MainActivity.class);
                    startActivity(i);
    
                    finish();
                }
            }, DURATION);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多