Я вроде застрял. У меня есть активность в моем приложении, которая просто не проходит, потому что она замораживает основной поток пользовательского интерфейса. Я вижу в журнале cat, что, поскольку он так долго не отвечает, он просто убивает все приложение и выключается .... что полностью отстой.
итак .... я запускаю этот процесс из меню и запускаю его, вызывая намерение .... базовые вещи. Но я звоню по телефону и запрашиваю у телефона все файлы изображений внутри и снаружи телефона. Я пытался использовать AsyncTask
во внутреннем классе, но это не так, как я понимаю, как это сделать правильно. Я не уверен, что возвращается, где и что.
Поэтому мой вопрос: могу ли я просто создать новый поток, который будет запущен по вызову намерения, и запустить ли действие на этом? Похоже, это было бы более легким решением, чем для меня, чтобы пройти свою деятельность и попытаться заставить AsyncTask
работать правильно.
Я думаю, это выглядело бы, может быть,
Thread t = new Thread(){
public void run(){
//start mark creation dialog view
Intent intentMarkCreation = new Intent(MixView.this, MarkCreation.class);
startActivityForResult(intentMarkCreation, 10);
}
};
t.start();
Я знаю, что андроид должен вести себя странно с обычными потоками, но я не могу понять, как использовать AsyncTask
, и я не смог бы найти много хороших подробных примеров.
Если бы кто-нибудь мог пролить свет на это с помощью нескольких примеров или продвинутого учебника, я был бы очень благодарен. :)
О, вот сломанная куча кода, который я пытался вставить в асинхронную задачу
public class GraffMarkCreation extends AsyncTask {
/* ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.planets_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
fileChooser.setAdapter(adapter); */
private EditText nameMark;
private EditText describeMark;
private Spinner fileChooser;
private Button SaveMarkForLaterUpload;
private Button uploadMark;
private RadioGroup radioButtonLayout;
private ProgressBar uploadProgress;
private Gallery fileGalleryChooser;
private ImageButton goBackButton;
@Override
public void onCreate(Bundle savedInstancedState)
{
super.onCreate(savedInstancedState);
this.setContentView(R.layout.markcreationform);
this.describeMark = (describeMark);
findViewById(R.id.describeMark);
this.nameMark = (nameMark);
findViewById(R.id.nameMark);
this.fileChooser = (fileChooser);
findViewById(R.id.fileChooser);
this.SaveMarkForLaterUpload = (SaveMarkForLaterUpload);
findViewById(R.id.SaveMarkForLaterUpload);
this.uploadMark = (uploadMark);
findViewById(R.id.uploadMark);
this.radioButtonLayout = (radioButtonLayout);
findViewById(R.id.radioButtonLayout);
this.uploadProgress = (uploadProgress);
findViewById(R.id.uploadProgress);
this.fileGalleryChooser = (fileGalleryChooser);
findViewById(R.id.fileGalleryChooser);
this.goBackButton = (goBackButton);
findViewById(R.id.goBackButton);
}}
////////////create list of images to populate the spinner view with///////////////////////
/* class findImages extends AsyncTask<String[],String,Cursor>{
@Override
protected Cursor doInBackground(String[]... arg0) {
// TODO Auto-generated method stub
String[] projection = { MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.DATA };
String selection = "";
String[] selectionArgs = null;
Cursor mImageExternalCursor = managedQuery
(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs,null);
Cursor mImageInternalCursor = managedQuery(MediaStore.Images.Media.INTERNAL_CONTENT_URI,
projection, selection, selectionArgs, null);
mImageExternalCursor.getString(mImageExternalCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
mImageInternalCursor.getString(mImageExternalCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
return mImageInternalCursor;
}
}
findImages findThemImages = new findImages();
String[] params = null;
findThemImages.execute(params);
////////////////////////////////////////////////////////////////////////////////////////////
radioButtonLayout.setOnCheckedChangeListener(this); */
/////Hook up radio buttons///////////////////////////////////////////////
/*
@Override
public void onCheckedChanged(RadioGroup radioButtonLayout, int buttonId) {
// TODO Auto-generated method stub
switch (buttonId){
case 1:
///if image button selected spinner is populated with
///list of images to chose from
/* String[] projection = { MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.DATA };
String selection = "";
String[] selectionArgs = null;
Cursor mImageExternalCursor = managedQuery
(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, null);
Cursor mImageInternalCursor = managedQuery(MediaStore.Images.Media.INTERNAL_CONTENT_URI,
projection, selection, selectionArgs, null);
mImageExternalCursor.getString(mImageExternalCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
mImageInternalCursor.getString(mImageExternalCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
*/
/*
break;
case 2:
///if audio button selected spinner is populated with
///list of audio files to chose from
break;
case 3:
///if video button selected spinner is populated with
///list of videos to chose from
break;
case 4:
///if text button selected spinner is not populated and
///user will be uploading only a basic mark with text only
break;
}
}