Fotonick
@Fotonick
android-er (Навальный отменит налоги фрилансерам)

Не вижу активити, пока процесс не закончится. Что изменить?

Делаю приложение очистки галереи от ненужных изображений. В анализе есть несколько правил попиксельного анализа изображения - это занимает много времени, в течение которого на экране ничего не показывается (тёмный экран), работу приложения приходится контролировать по логам, хотя я хотел бы сделать чтобы процесс анализа изображения отображался на экране конечно. Хотя бы номер изображения которое сейчас анализируется.

То есть после выбора файла через стандартный файловый менеджер и отображения конечного результата анализа изображений в папке проходит много времени, в течение которого не видно что происходит, если не логировать работу приложения.

Часть кода с выбором файла для анализа взята с интернета, так что я не совсем понимаю, что надо изменить, чтобы активити отображалась и во время всего процесса анализа изображений.

public class MainActivity extends AppCompatActivity {

    private static final int ACTIVITY_CHOOSE_FILE = 3;

    TextView sourcePath;
    TextView destPath;
    TextView imageNumber;
    ImageView imageOnProcess;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button chooseFolder = (Button) findViewById(R.id.choose_folder);
        sourcePath = (TextView) findViewById(R.id.source_path);
        destPath = (TextView) findViewById(R.id.destination_path);
        imageNumber = (TextView) findViewById(R.id.imagenumber);
        imageOnProcess = (ImageView) findViewById(R.id.imageOnProcess);

        chooseFolder.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent chooseFile;
                Intent intent;
                chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
                chooseFile.setType("file/*");
                intent = Intent.createChooser(chooseFile, "Choose a file");
                startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);

            }
        });
    }


    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK) return;

        if (requestCode == ACTIVITY_CHOOSE_FILE) {
            Uri uri = data.getData();
            String firstFilePath = getRealPathFromURI(uri);

            //МНОГО КОДА ПОПИКСЕЛЬНОГО АНАЛИЗА ИЗОБРАЖЕНИЯ И ПЕРЕМЕЩЕНИЕ В НУЖНУЮ ПАПКУ

        }
    }

    public String getRealPathFromURI(Uri contentUri) {
        String[] proj = {MediaStore.Images.Media.DATA};
        Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
        if (cursor == null) return null;
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
}
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 1
a13xsus
@a13xsus
Lazy developer
Чтобы был отклик от интерфейса, вам нужно код попиксельного анализа выполнять в отдельном потоке, в бекграунде. Например, через AsyncTask.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы