Java 等待特定操作-Android

Java 等待特定操作-Android,java,android,background,task,wait,Java,Android,Background,Task,Wait,我想在继续代码流之前等待特定操作完成。 大概是这样的: protected void onCreate(Bundle savedInstanceState) { downloadSomeFiles(); // I want to wait for this operation to finish Log.d("Download", "Download Complete") //This should run After downloading completed } 然而,下载需要一些时间,

我想在继续代码流之前等待特定操作完成。 大概是这样的:

protected void onCreate(Bundle savedInstanceState) {

downloadSomeFiles(); // I want to wait for this operation to finish
Log.d("Download", "Download Complete") //This should run After downloading completed
}
然而,下载需要一些时间,我最终总是得到NullPointerException,因为下载没有完成。
假设我们不知道必须等待多长时间。

在主线程上长时间运行操作从来都不是一个好主意,因为它们会阻塞用户界面

如果您想在应用程序运行时执行此操作,请考虑使用从代码> java .UTI.Outual包(或如果要切换到Kotlin)的方法。代码>异步任务已被弃用。 以下是指南:


如果你希望你的下载在后台执行,即使你的应用程序关闭了,考虑使用<代码>服务<代码>:

在主线程上长时间运行的操作从来都不是一个好主意,因为它们阻止了用户界面。p>

如果您想在应用程序运行时执行此操作,请考虑使用从代码> java .UTI.Outual包(或如果要切换到Kotlin)的方法。代码>异步任务已被弃用。 以下是指南:


如果你希望你的下载在后台执行,即使你的应用程序关闭了,考虑使用<代码>服务<代码>:

我只能建议使用asyTasks

这里有一个示例方法供您理解。 我只是想对此发表评论,但我没有足够的声誉来做这件事

AsyncTask<String, String, String> asyncTask = new AsyncTask<String, String, String> {
   @Override
   protected void onPreExecute() {
       super.onPreExecute();
       // ... Show a Progress Dialog or anything you want just to indicate that you 
       // ... are downloading ...
   }

   @Override
   protected void onProgressUpdate(String... values) {
       super.onProgressUpdate(values);
   }

   @Override
   protected String doInBackground(String... strings) {
       // ... Do Downloading or anything
   }

   @Override
   protected void onPostExecute(String s) {
       super.onPostExecute(s);

       // Post any codes to be followed here ...
       Log.d("Download", "Download Complete")
   }
}

asynTask.execute();
AsyncTask AsyncTask=新建AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//…显示一个进度对话框或任何您想表明您
//…正在下载。。。
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的字符串背景(字符串…字符串){
//…下载什么的
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
//在此处发布任何要遵循的代码。。。
Log.d(“下载”,“下载完成”)
}
}
asynTask.execute();

我只能建议使用Asyntask

这里有一个示例方法供您理解。 我只是想对此发表评论,但我没有足够的声誉来做这件事

AsyncTask<String, String, String> asyncTask = new AsyncTask<String, String, String> {
   @Override
   protected void onPreExecute() {
       super.onPreExecute();
       // ... Show a Progress Dialog or anything you want just to indicate that you 
       // ... are downloading ...
   }

   @Override
   protected void onProgressUpdate(String... values) {
       super.onProgressUpdate(values);
   }

   @Override
   protected String doInBackground(String... strings) {
       // ... Do Downloading or anything
   }

   @Override
   protected void onPostExecute(String s) {
       super.onPostExecute(s);

       // Post any codes to be followed here ...
       Log.d("Download", "Download Complete")
   }
}

asynTask.execute();
AsyncTask AsyncTask=新建AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//…显示一个进度对话框或任何您想表明您
//…正在下载。。。
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的字符串背景(字符串…字符串){
//…下载什么的
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
//在此处发布任何要遵循的代码。。。
Log.d(“下载”,“下载完成”)
}
}
asynTask.execute();

创建一个响应回调,如下所示:

public interface ResponseCallback {
        void onDownload();
}
那么你的方法呢

downloadSomeFiles(ResponseCallback responsecallback) {
    //Download files
    responsecallback.onDownload(); //Trigger it
}
那就叫它

protected void onCreate(Bundle savedInstanceState) {

downloadSomeFiles(new ResponseCallback() {
            @Override
            public void onDownload() {
                Log.d("Download", "Download Complete");
            }
});

创建一个响应回调,如下所示:

public interface ResponseCallback {
        void onDownload();
}
那么你的方法呢

downloadSomeFiles(ResponseCallback responsecallback) {
    //Download files
    responsecallback.onDownload(); //Trigger it
}
那就叫它

protected void onCreate(Bundle savedInstanceState) {

downloadSomeFiles(new ResponseCallback() {
            @Override
            public void onDownload() {
                Log.d("Download", "Download Complete");
            }
});

我在android文档中读到了这篇文章。但现在它已经过时了。我在android文档中读到了这篇文章。但是现在它被剥夺了种族。