Android活动因内容而产生黑屏

时间:2014-09-04 08:50:42

标签: java android android-activity

我有2项活动。

ActivityA通过点击按钮启动activityB。

单击该按钮时,我会创建一个新对话框,并将图像显示为一种缩减加载屏幕(不会受到进度条的影响)。

当activityB启动时,ActivityA的对话框被终止,我立即在oncreate的顶部开始一个新对话框。我对activityB的创造做了很多事情。

创建广告视图,为主视图创建一些文本并创建GLsurface渲染器。

问题是当调用activityB的oncreate时,我的两个对话框之间会出现4秒的黑屏。我想尽可能地减少这个。

所以无论如何都要让活动B中的对话框立即运行,而不是等待onCreate的其余部分完成它正在做的事情。如果需要,将提供代码

更新。这是我的glsurface渲染器的创建,导致黑屏这么长时间。这是活动B代码

public class ActivityB extends BaseGameActivity
{
/** Hold a reference to our GLSurfaceView */
private MyGLSurfaceView mGLSurfaceView;
public GamePlay GamePlay;
public GoogleApiClient mGoogleApiClient = null;
private AdView adView;
private static final String AD_UNIT_ID = "******************************";
private Button RotateButton;

@Override
public void onCreate(Bundle savedInstanceState)
{       
    super.onCreate(savedInstanceState);
    // load screen dialog
     Dialog loader_dialog = new Dialog(this,android.R.style.Theme_Black_NoTitleBar_Fullscreen);
        loader_dialog.setContentView(R.layout.loading_screen);
        loader_dialog.show();
    // Create an ad.
    adView = new AdView(this);
    adView.setAdSize(AdSize.SMART_BANNER);
    adView.setAdUnitId(AD_UNIT_ID);

    // Add the AdView to the view hierarchy. The view will have no size
    // until the ad is loaded.
    RelativeLayout layout = new RelativeLayout(this);
    layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,    LayoutParams.MATCH_PARENT));

    // Create an ad request. Check logcat output for the hashed device ID to
    // get test ads on a physical device.
    AdRequest adRequest = new AdRequest.Builder()
    .addTestDevice("*****************************").build();
    // Start loading the ad in the background.
    adView.loadAd(adRequest);

    final TextView Score = new TextView(this);
    Score.setText(" 0");
    RelativeLayout.LayoutParams scoreParams = new 
    RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    Score.setLayoutParams(scoreParams);

    Typeface tf = Typeface.createFromAsset(getAssets(),"Fonts/test.ttf");
    Score.setTextSize(getResources().getDimension(R.dimen.textsize));
    Score.setTypeface(tf);
    Score.setTextColor(Color.parseColor("#FDAA03"));

    LayoutInflater inflater = (LayoutInflater) this.getSystemService(this.LAYOUT_INFLATER_SERVICE);
    View userInterface = inflater.inflate(R.layout.user_interface, null);

    GameButton = (Button) userInterface.findViewById(R.id.gamebutton);

    GameButton.setOnTouchListener(new OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            //irrelivant game stuff

        }
    });

    // Check if the system supports OpenGL ES 2.0.
    final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
    final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;

    if (supportsEs2)
    {

        // Request an OpenGL ES 2.0 compatible context.
        mGLSurfaceView = new MyGLSurfaceView(this); new GLSurfaceView(this);
        mGLSurfaceView.setEGLContextClientVersion(2);           
        final DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);          
        // Set the renderer to our demo renderer, defined below.
        mGoogleApiClient = getApiClient();

        RelativeLayout.LayoutParams adParams = 
                new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
            adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
            adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
        layout.addView(mGLSurfaceView);
        layout.addView(userInterface);
        layout.addView(Score);
        layout.addView(adView, adParams);

        mGLSurfaceView.setRenderer(new MyRenderer(this, Score,  mGoogleApiClient),displayMetrics);


        //Set main renderer             
        setContentView(layout); 


    }
    else
    {
        // This is where you could create an OpenGL ES 1.x compatible
        // renderer if you wanted to support both ES 1 and ES 2.
        return;
    }   

}   


@Override
protected void onResume() 
{
    // The activity must call the GL surface view's onResume() on activity onResume().
    super.onResume();
    mGLSurfaceView.onResume();
}

@Override
protected void onPause()
{
    // The activity must call the GL surface view's onPause() on activity onPause().
    super.onPause();
    mGLSurfaceView.onPause();
}

}

2 个答案:

答案 0 :(得分:1)

您可以使用AsyncTask

仅准备onCreate内的UI元素(获取对所需视图的引用,显示对话框),但将所有繁重的任务移至AsyncTask,并更新UI(关闭对话框,填充视图) ,...)一旦加载完成,就从onPostExecute开始。如果需要,您甚至可以使用AsyncTask来显示加载进度;)

答案 1 :(得分:0)

您可以使用

public static Dialog d;
活动A中的

在活动中展示a 转到活动B. 和aftar所有的操作都成功完成了 您可以从活动B中删除该对话框,例如

if(A.d.isshowing()){
  A.d.dismiss();
}

希望这能解决你的问题。