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文档中读到了这篇文章。但是现在它被剥夺了种族。