Android: небуферизованный ввод-вывод

1

Я хочу использовать Non Blocking IO для чтения потока/вывода из фонового процесса. Может ли кто-нибудь дать мне пример того, как использовать Non Blocking IO на Android?

Спасибо за помощь.

Теги:

2 ответа

1
Лучший ответ

Вот класс, который я использую, чтобы загрузить файл из Интернета или скопировать файл в файловой системе и как я его использую:

// Download a file to /data/data/your.app/files
new DownloadFile(ctxt, "http://yourfile", ctxt.openFileOutput("destinationfile.ext", Context.MODE_PRIVATE));

// Copy a file from raw resource to the files directory as above
InputStream in = ctxt.getResources().openRawResource(R.raw.myfile);
OutputStream out = ctxt.openFileOutput("filename.ext", Context.MODE_PRIVATE);
final ReadableByteChannel ic = Channels.newChannel(in);
final WritableByteChannel oc = Channels.newChannel(out);
DownloadFile.fastChannelCopy(ic, oc);

Также существует подход Selector, вот несколько отличных (Java) руководств о селекторах, каналах и потоках:

  • 0
    WritableByteChannel.write() все еще блокирует в моем случае.
  • 1
    Это не неблокирующая реализация.
1
Операция фона

может быть выполнена многими способами в Android. Я предлагаю вам использовать AsyncTask:

private class LongOperation extends AsyncTask<String, Void, String> {

 @Override
 protected String doInBackground(String... params) {
  // perform long running operation operation
  return null;
 }

 /* (non-Javadoc)
  * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
  */
 @Override
 protected void onPostExecute(String result) {
  // execution of result of Long time consuming operation
 }

 /* (non-Javadoc)
  * @see android.os.AsyncTask#onPreExecute()
  */
 @Override
 protected void onPreExecute() {
 // Things to be done before execution of long running operation. For example showing ProgessDialog
 }

 /* (non-Javadoc)
  * @see android.os.AsyncTask#onProgressUpdate(Progress[])
  */
 @Override
 protected void onProgressUpdate(Void... values) {
      // Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
  }
}

Затем вы выполните его следующим образом:

public void onClick(View v) {
   new LongOperation().execute("");
}

ссылка: xoriant.com

В методе doInBackground вы можете поместить файл доступа к файлу. ссылку на доступ к файлам можно найти на сайте разработчика Android.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню