Android应用程序中的多个异步任务
我有一个奇怪的问题。我正在开发一个Android应用程序,它有3个独立的异步任务。当我尝试在四核手机上运行应用程序时,没有问题。但如果我尝试在双核手机上运行应用程序,应用程序就会崩溃。如何修改双核手机的任务 这是我的密码Android应用程序中的多个异步任务,android,asynchronous,Android,Asynchronous,我有一个奇怪的问题。我正在开发一个Android应用程序,它有3个独立的异步任务。当我尝试在四核手机上运行应用程序时,没有问题。但如果我尝试在双核手机上运行应用程序,应用程序就会崩溃。如何修改双核手机的任务 这是我的密码 OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback); 这是第一个异步任务。第二个是Parse.com文件上传异步saveInBackground方法 public v
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
这是第一个异步任务。第二个是Parse.com文件上传异步saveInBackground方法
public void startUpload(String fileName) {
try {
photoFile = new ParseFile(fileName, scaledData);
if (isTac) {
pictures.setPhotoFileTac(photoFile);
} else if (isCanak) {
pictures.setPhotoFileCanak(photoFile);
} else if (isYaprak) {
pictures.setPhotoFileYaprak(photoFile);
}
// pictures.save();// Telefon çekirdeğine göre 2 asenkron methodu desteklemiyor o yüzden sadece save yazılabilir fakat başarılı kontolü SaveCallback' te yakalanamaz.
pictures.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if(e == null){
Toast.makeText(getApplicationContext(),"Buluta yükleme başarılı. " , Toast.LENGTH_LONG).show();
if(pdialog != null)
{
pdialog.dismiss();//Eğer işlem başarılı ise asenkron sınıfta yaratılan progressbar ı kapat.
}
}
else{
Toast.makeText(getApplicationContext(),"Hata" +e.toString(),Toast.LENGTH_LONG).show();
}
}
});
}
catch (Exception ex)
{
Toast.makeText(getApplicationContext(),"Bağlantı Hatası !",Toast.LENGTH_LONG).show();
}
}
第三个是上传过程的进度条
public class AsyncUpload extends AsyncTask<String,Void,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pdialog = new ProgressDialog(TakePictureActivity.this);
pdialog.setMessage("Yükleniyor...");
pdialog.setIndeterminate(false);
pdialog.setCancelable(false);
pdialog.show();
}
@Override
protected String doInBackground(String... fileNames) {
return fileNames[0];
}
@Override
protected void onPostExecute(String name) {
startUpload(name);
super.onPostExecute(name);
}
}
这是logcat输出
java.lang.NullPointerException
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:482)
at com.altygtsoft.biomatch.TakePictureActivity.saveScaledPhoto(TakePictureActivity.java:202)
at com.altygtsoft.biomatch.TakePictureActivity.access$000(TakePictureActivity.java:45)
at com.altygtsoft.biomatch.TakePictureActivity$2$1$2.onPictureTaken(TakePictureActivity.java:147)
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:855)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5371)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
刚刚意识到我的想法太大,无法发表评论,所以-> 如果您执行以下操作,会发生什么情况
//Beware pseudo-code
new AsyncTask<>({
onPreExecute(){
//keep your code from before
...
}
doInBackground(Params... params){
startUpload(params[0], params[1]); //minus the done() function, plus pictures?
}
onPostExecute(){
//As I'm not sure where it fits in, if possible execute done() here.
}
}).execute(fileName, pictures); //couldn't find the decleration of pictures, so I stole the decleration of independence instead. Also maybe you need to put pictures in there, depending on where it is and how public/static.
//小心伪代码
新异步任务({
onPreExecute(){
//保留以前的代码
...
}
doInBackground(Params…Params){
startUpload(参数[0],参数[1]);//减去done()函数,再加上图片?
}
onPostExecute(){
//因为我不确定它在哪里,如果可能的话,在这里执行done()。
}
}).执行(文件名、图片)//找不到对图片的删减,所以我偷了对独立的删减。也可能你需要把图片放在那里,这取决于它在哪里以及公共/静态的方式。
请将stacktrace与错误一起发布您是否也会发布您实际执行异步任务的行?是否出现内存不足错误?我已经添加了异步方法初始化的行。这是“不幸的是bla bla”开始时的logcat输出。当我使用pictures.save()解析方法时,在双手机和四手机上没有错误。但如果我使用saveInBackground的解析方法,就会在双核手机上发生此错误。感谢您的贡献,我决定在另一个活动中进行图像处理,基本上我已经注释掉了OpenCV.initAsync行,并为我解决了问题,但我对AsyncTask的定义有问题,我知道,但我现在还看不到:)
//Beware pseudo-code
new AsyncTask<>({
onPreExecute(){
//keep your code from before
...
}
doInBackground(Params... params){
startUpload(params[0], params[1]); //minus the done() function, plus pictures?
}
onPostExecute(){
//As I'm not sure where it fits in, if possible execute done() here.
}
}).execute(fileName, pictures); //couldn't find the decleration of pictures, so I stole the decleration of independence instead. Also maybe you need to put pictures in there, depending on where it is and how public/static.