Tôi có một vài phương thức AsyncTask riêng mà tôi muốn chia ra thành các lớp ngoài công cộng. Trong ứng dụng của tôi, tôi có một ứng dụng mở rộng lớp công khai chứa một số thói quen chia sẻ mà tôi muốn truy cập từ các phần khác nhau của ứng dụng của tôi. Tuy nhiên, khi tôi phá vỡ lớp AsyncTask, tôi không còn có thể gọi phương thức getApplicationContext() để lấy một tham chiếu đến thư viện ứng dụng của tôi (lớp này không kế thừa bất kỳ thứ gì từ Hoạt động bây giờ). getBaseContext() cũng sẽ có vấn đề. Tôi có nên đi qua một bối cảnh vào AsyncTask khi nó được instantiated và xây dựng từ đó? Bạn không chắc chắn liệu điều đó có an toàn hay không.getApplicationContext trong lớp AsyncTask?
import java.util.ArrayList;
import android.os.AsyncTask;
public class DlTask extends AsyncTask
{
long totalbytes = 0;
long totalread = 0;
ArrayList <String> data;
@Override
protected void onPreExecute()
{
AppLib lib = (AppLib) getApplicationContext();
lib.saveStatusText ("Contacting " + lib.getServerAddress() + ":" + lib.getServerPort() + "...");
super.onPreExecute();
}
@Override
protected Object doInBackground (Object... params)
{
data = lib.sendCommand (CMD_LIST);
return true;
}
@Override
protected void onPostExecute (Object result)
{
if (data != null)
{
lib.saveStatusText (data.size() + " files found");
}
else
{
Log.d (TAG, "data is null");
Toast.makeText (getBaseContext(), msg, Toast.LENGTH_SHORT).show();
}
super.onPostExecute(result);
}
}
Bạn phải chuyển trong ngữ cảnh trong hàm tạo. –
bạn nên sử dụng hàm tạo AsyncTask với các hàm ngữ cảnh. – Ashok