Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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_Message - Fatal编程技术网

Android 如何在安卓系统中显示一段时间的消息

Android 如何在安卓系统中显示一段时间的消息,android,message,Android,Message,所以我有一个主UI线程,还有一个函数需要花费相当长的时间。所以我当时想在屏幕上向用户显示一些东西,但我不想将我的函数mve到线程中,因为它需要一些GUI通信 所以我需要的是这个 Message msg; msg.wait("wait dude"); //my code msg.dismis_wait(); 有什么想法吗 我尝试将代码放入线程,但有一个问题,在代码结束时,我需要更改我的视图,我无法从线程执行此操作。消息不是您要使用的消息 你应该试试看 下面是文档中的一个示例: Conte

所以我有一个主UI线程,还有一个函数需要花费相当长的时间。所以我当时想在屏幕上向用户显示一些东西,但我不想将我的函数mve到线程中,因为它需要一些GUI通信

所以我需要的是这个

 Message msg;
 msg.wait("wait dude");
 //my code
 msg.dismis_wait();
有什么想法吗


我尝试将代码放入线程,但有一个问题,在代码结束时,我需要更改我的视图,我无法从线程执行此操作。

消息
不是您要使用的消息

你应该试试看

下面是文档中的一个示例:

Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);
toast.show();

如果你想要祝酒词,你可以这样做:

for (int i=0; i < 2; i++) { 
    Toast.makeText(yourclass.this, " Here you message ", Toast.LENGTH_LONG).show();
}

您也可以延迟启动它,或者只运行一次或以其他方式运行它。查看以下文档:

您可以像建议的其他答案一样使用
Toast

如果您有长时间运行的代码,还可以使用单独的
线程
,并使用向主线程发送消息以在屏幕中进行更改


您还可以使用,一个,这是一个Android特殊线程,允许您在运行期间更改视图,这是通过
doInBackground
方法完成的。

尝试使用倒计时。以下是课堂:

public class MyCount extends CountDownTimer{
    public MyCount(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        }

    @Override
    public void onFinish() {
 // Dismiss message
     }

    @Override
    public void onTick(long millisUntilFinished) {

    }
}
并在onCreate中或在您希望显示消息的位置使用此选项

MyCount counter = new MyCount(15000,1000);
    counter.start();
// Show message
启动计时器后,显示一条完成倒计时关闭消息。 可以在对象创建时更改值。第一个值即“15000”是以毫秒为单位的总时间,第二个值即“1000”是以毫秒为单位的每滴答时间


希望这能对您有所帮助。

@gabrjan:
of ir A
为您的查询提供了正确的解决方案。永远不要在主线程中运行长时间/cpu密集型操作。使用AsyncTask/线程执行ur后端操作,并使用handler实例发布ui更新。你也可以使用runOnUiThread来更新你的UI

 runOnUiThread(new Runnable() {
                public void run() {

                      HERE U CAN WRITE UR UI UPDATION CODE.
                }
            });

如果我使用toast,那么在开始编写toast.makeText(Main.this,“hereyoumessage”,toast.LENGTH_LONG.show()时会出现一个问题;直到所有代码都通过时才显示。我知道这很奇怪,但事实就是这样:S@Gabrjan:将整个代码放入scheduleTaskExecutor中。那个人在后台一行一行地运行代码。所以你可以在开始的时候展示你的祝酒词。请参阅上面的编辑。如果我使用toast,则在开始编写toast.makeText(Main.this,“Here you message”,toast.LENGTH_LONG.show()时会出现问题;直到所有代码都通过时才显示。我知道这很奇怪,但它是这样的:因此,如果我在最后更改视图,它根本不会显示:例如,在访问
onCreate
方法时显示toast消息。如果你有长时间的进程代码,你应该考虑在线程中运行它。我有一个大约需要15秒的函数,在这段时间我想在屏幕上显示一些stuf…所以也许你正在寻找
ProgressDialog
。这实际上是最好的答案,asynctack做到了。因为它是postexecute方法,顺便说一句,我可以在线程中执行吗?@gabrjan如果我理解正确,是的,你可以在常规线程中执行。您可以使用Handler,这是一种发送消息的机制。这样,当您完成线程执行时,您可以发送带有成功或不成功信号的消息,并分别更新屏幕。可以使用
sendEmptyMessage
方法发送消息,其中的数字表示操作是否成功结束。
MyCount counter = new MyCount(15000,1000);
    counter.start();
// Show message
 runOnUiThread(new Runnable() {
                public void run() {

                      HERE U CAN WRITE UR UI UPDATION CODE.
                }
            });