Я хочу использовать Non Blocking IO для чтения потока/вывода из фонового процесса. Может ли кто-нибудь дать мне пример того, как использовать Non Blocking IO на Android?
Спасибо за помощь.
Вот класс, который я использую, чтобы загрузить файл из Интернета или скопировать файл в файловой системе и как я его использую:
// 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) руководств о селекторах, каналах и потоках:
может быть выполнена многими способами в 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.
WritableByteChannel.write()
все еще блокирует в моем случае.