0

在我的应用程序中,我使用启动屏幕活动将可驱动文件保存为 sd 卡或内置内存中的文件。效果很好,但是这个活动不显示内容视图。为什么这个活动保存文件但不显示内容视图?

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

    for (int i = 0; i < DRAWABLES.length; i++) {
        saveDrawables(
                BitmapFactory.decodeResource(getResources(), DRAWABLES[i]),
                String.valueOf(i + 2));
    }

    startActivity(new Intent(SplashActivity.this, MotivateActivity.class));
    finish();

}

public void saveDrawables(Bitmap drawable, String drawableName) {

    try {
        String filename = drawableName + ".jpg";
        Log.i("Local filename:", "" + filename);

        File dir = new File(Environment.getExternalStorageDirectory()
                + "/MotivateMe/");
        File file = new File(dir, filename);

        if (!dir.exists()) {
            dir.mkdirs();
        }

        if (file.createNewFile()) {
            file.createNewFile();
        }

        FileOutputStream fileOutput = new FileOutputStream(file);
        drawable.compress(Bitmap.CompressFormat.JPEG, 100, fileOutput);
        fileOutput.close();
    } catch (Exception exception) {

    }

}

}

4

4 回答 4

2

尝试按照此处的说明进行操作,或者可能会有所帮助:) http://www.androidhive.info/2013/07/how-to-implement-android-splash-screen-2/

于 2013-11-01T06:43:03.600 回答
2

代码在很多方面确实是错误的……</p>

但为了简单起见,假设您在错误的地方进行工作(加载图像)。

我建议你读两件事。

1)活动生命周期

2)Asynctask(你应该实际做这项工作的地方)。

于 2013-11-01T06:43:54.527 回答
0

它不会显示您保存的文件,因为在活动呈现布局之前,您已经在onCreate()方法中启动了另一个活动。这就是为什么只运行保存图像的代码,然后立即开始新的活动。

于 2013-11-01T07:09:27.207 回答
-1

修改 onCreate 代码如下

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    final Handler handler=new Handler();
    new Thread(new Runnable() {

        @Override
        public void run() {
            for (int i = 0; i < DRAWABLES.length; i++) {
                saveDrawables(
                        BitmapFactory.decodeResource(getResources(), DRAWABLES[i]),
                        String.valueOf(i + 2));
            }
            handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                     startActivity(new Intent(SplashActivity.this, MotivateActivity.class));
                        finish();
                }
            },1000);                
        }
    }).start();

}

由于您在 UI 线程中执行操作,因此该线程将挂在那里,您将看不到启动画面。线程完成后,您将调用完成,因此您无法再看到启动画面。在上面的代码中,我创建了一个新线程来执行该任务,这意味着活动将正常加载。希望这能解决您的问题。

于 2013-11-01T06:52:25.367 回答