Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 活动布局显示太晚_Android_Layout_Android Activity - Fatal编程技术网

Android 活动布局显示太晚

Android 活动布局显示太晚,android,layout,android-activity,Android,Layout,Android Activity,当这个活动开始时,我看到一个黑屏(不是活动布局)。然后,布局在10秒后显示,但我希望布局在睡眠代码之前可见 我如何创造这种行为 我试图将睡眠代码放入onStart()函数中,但没有任何更改。您已经完成了 package com.example.myapp; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Acti

当这个活动开始时,我看到一个黑屏(不是活动布局)。然后,布局在10秒后显示,但我希望布局在睡眠代码之前可见

我如何创造这种行为

我试图将睡眠代码放入
onStart()
函数中,但没有任何更改。

您已经完成了

package com.example.myapp;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

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


    @Override
    public void onResume() {   
        super.onResume();
        sleepForaWhile();
    }

    protected void sleepForaWhile()
    {
        try
        {
            Thread.sleep(10000);

        } catch (InterruptedException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
这会阻止ui线程。永远不要阻塞ui线程。请删除
sleep()


我不知道你为什么要耽搁。您可以延迟使用
处理程序
。另外,先创建
onCreate
,然后恢复
onResume

假设这只是一个示例,(我假设您使用
Thread.sleep()
来表示任意长时间运行的任务),您需要将
Thread.sleep()
方法移出UI

在UI线程上的所有内容完成之前,UI不会返回视图。相反,我们可以使用异步任务

Thread.sleep(10000);

这意味着将显示布局,然后在后台运行AsyncTask,执行您需要它执行的任何操作。如果愿意,您可以通过onPostExecute方法更新布局。

请注意,onResume()中的代码是在onCreate()中的代码之后执行的,如下所示:与其休眠线程,不如创建一个计时器来阻止您的应用程序功能,但保持线程的有效性。我知道该代码,我已经添加了它用于测试。这只是一个示例代码。我的目标是在显示布局后执行某些操作。@1461ts,因为您不需要睡眠或延迟。只需在恢复时执行您想要的操作即可是的,对,它代表了其他一些长任务。您能展示onPostExecute方法的用法吗?@1461ts如果您正在执行任何网络操作或阻止ui线程的任何操作,那么您需要一个线程或异步任务,否则您不需要这些。阅读我已经为您更新了示例。基本上,如果您想在
onCreate
中编写任何需要等待任务完成的内容,您应该将其移动到
onPostExecute
。在onPostExecute方法中,我如何调用activity方法?您应该在activity中创建AsyncTask作为内部类。然后你可以像平常一样访问它们。
public class DoSomethingTask extends AsyncTask<Void,Void,Void> {

    private OnCompletionListener listener;

    // Pass the interface using this method
    public setOnCompletionListener(OnCompletionListener listener){
        this.listener = listener;
    }

    protected Void doInBackground(Void... params) {
       Thread.sleep(10000);
    }

    protected void onPostExecute(Void result) {
        // This will be called after the doInBackground method.
        // This method is called on the UI thread.

        // If an instance has been passed, you can access the 
        // onComplete method
        if (listener != null) {
            listener.onComplete();
        }
    }   

    // Create an interface
    public interface OnCompletionListener {
        void onComplete();
    }   
}
DoSomethingTask task = new DoSomethingTask();

task.setOnCompletionListener(new OnCompletionListener() {
    // put the activity methods in here
});

task.execute();`