Articles of android asynctask

连接到一个web服务从android – AsyncTask或服务?

我在写一个将连接到REST / JSON web服务的android应用程序。 用户将获取信息,上传评论,下载和上传图片等。 我知道我不应该在Activity / UI线程中保留所有这些networking通信,因为这会导致ANR。 我感到困惑的是,我是否应该使用“手动”线程来实现这个AsyncTask或服务; 有了服务,我只需要在web服务的API中为每个方法提供一个公共方法。 然后,我会在这些方法中实现线程化。 如果我使用了一个AsyncTask,我会创build一个帮助类,为webservice的API中的每个方法定义AsyncTasks。 哪种方法是首选? 与web服务的交互只会发生在用户在活动中。 一旦他们切换到另一个应用程序,或退出程序,就不需要与web服务进行通信。

Android 4.0 asynctask在同一时间不可能

我有同样的问题同时运行多个AsyncTasks – 不可能? 除了我使用android 4.0与android:minSdkVersion =“14”。 我尝试了他的例子,并得到: bar bar bar bar bar bar bar bar bar 编辑: 我在这里find了解决scheme 而不是使用: task.execute(); 使用 : task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);

Android的AsyncTask onPostExecuteclosures主要的UI线程

我有一个与AsyncTask和onPostExecute问题。 我发现onPostExecute执行在不同于主ui线程的线程上,当我修改任何视图时,会导致发生CalledFromWrongThreadException。 我把一些日志logging,看看哪些线程onPreExecute,doInBackground和onPostExecute正在运行。 我会看到像这样的结果… onPreExecute ThreadId: 1 doInBackground ThreadId: 25 onPostExecute ThreadId: 18 我相信主要的UI线程ID是1,我希望onPre和onPost都在线程1上执行。我确保创build并从UI线程(例如在Activity的onCreate)中调用execute方法。 另外需要注意的是,后来的asynchronous任务将在与之前的asynchronous任务onPostExecute方法(本例中为线程18)相同的线程上运行onPostExecute方法。 现在为了解决这个问题,我在调用runOnUiThread的时候将代码封装在onPostExecute方法中,但是我认为这很冒充,希望能够解决真正的问题。 我没有想法! 任何人有任何见解? 我很乐意回答任何有助于进一步调查的问题! 编辑: asynchronous任务在代码中运行有两种方法。 我想知道这些例子中的后者是否会造成奇怪的事情发生? public class SomeActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); new SomeAsyncTask().execute(); } private class SomeAsyncTask extends AsyncTask<String, Void, Integer> { @Override public void onPreExecute() { Thread.currentThread().getId() // 1 […]

为什么在AsyncTask中使用Retrofit?

几天前,当我试图学习如何使用Retrofit,我发现一些教程,说一些Occassions,我们应该与改造一起使用ASyncTask。 这使我感到困惑,因为我的印象是我们使用Retrofit来避免使用ASyncTask。 现在我已经很好地理解了Retrofit(足以使用它并将所有的ASyncTask代码改为Retrofit),但是我仍然没有find一个很好的借口或者使用ASyncTask进行Retrofit的理由。 还是我在这里错过了什么? 顺便说一句,我看到至less有3个不同的教程提到与ASyncTask使用Retrofit,但我无法find它了。 我只能find1, http://karanbalkar.com/2014/12/tutorial-94-using-retrofit-for-android/

Android的loopj asynchttpclient返回响应

在我的一个项目中,我使用loopj asynchttpclient与我的网站进行通信。 沟通部分运作良好,得到回应 我的活动看起来像 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); WebRequest test=new WebRequest(); test.callService(); } WebRequest类为 public class WebRequest extends Activity { public void callService(){ AsyncHttpClient client = new AsyncHttpClient(); client.post("http://domain.com/dp/index.php", new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { Log.v("P",response); } @Override public void onFailure(Throwable e, String response) { Log.v("PS",e.toString()); } }); } […]

在jellybean的NetworkOnMainThreadException错误

我一直试图让这个工作在最后一个星期左右,仍然不知道是什么问题。 它适用于android 2.1,但不适用于4.1。 我得到这个string在一个服务,检查我的应用程序的更新。 latestVersion = Integer.parseInt(getHttpString(urlLatestVersion)); 它在checkForUpdate()中调用; 这在onStart(Intent intent,int startId)中被调用; private String getHttpString(String urlString) throws IOException { InputStream in = null; int response = -1; URL url = new URL(urlString); URLConnection conn = url.openConnection(); if (!(conn instanceof HttpURLConnection)) throw new IOException("Not an HTTP connection"); try { HttpURLConnection httpConn = (HttpURLConnection) conn; httpConn.setAllowUserInteraction(false); httpConn.setInstanceFollowRedirects(true); httpConn.setRequestMethod("GET"); […]

水平进度条不更新其状态

我试图显示水平进度栏“ 不ProgressDialog ”对我这样的活动 这里是我的XML文件包含 <ProgressBar android:id="@+id/pdialog" style="?android:attr/progressBarStyleHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:indeterminate="true" /> 我想通过设置pdialog.setProgress()使用AsyncTask Class更新其状态,但它没有显示任何进度,它与progressdialog一起使用,但与水平进度条无关。 public class MainActivity extends Activity { private SQLiteDatabase db; private Cursor cursor; private ProgressBar pdialog; private ImageButton btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.start); btn = (ImageButton) findViewById(R.id.startbtn); pbar = (ProgressBar) findViewById(R.id.progressBar1); pdialog = (ProgressBar) findViewById(R.id.pdialog); pdialog.setMax(100); pdialog.setProgress(20); btn.setOnClickListener(new View.OnClickListener() […]

Asynctask重度使用

AsyncTask被devise成围绕Thread和Handler的助手类,并不构成通用的线程框架。 理想情况下,AsyncTasks应该用于短操作(最多几秒钟)。 这就是它在文档中所说的。 说networking语言,“几秒钟”多久? 我的应用程序将执行以下操作,从数据库获取数组列表,发送到服务器,获取另一个列表(json),发送一个好的,它收到列表,parsingjsons,在db中插入列表,做一些其他的进程分贝,更新用户界面(该列表可以达到5000-1000条目的对象实例。) 使用asynctask这样的东西是一个好主意? 我也需要根据服务器响应的结果来更新gui。 如果不是,我还有其他的select吗?

使用AsyncTask在后台服务中添加android进度对话框,得到致命exception

Iam从预定服务中调用Asynctask每10分钟运行一次。 运行服务时, 进度对话框从OnpreExecute获取exception。 错误 : FATAL EXCEPTION: main android.view.WindowManager$BadTokenException: Unable to add window — token null is not for an application at android.view.ViewRootImpl.setView(ViewRootImpl.java:594) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.Dialog.show(Dialog.java:286) 编辑1: 报警pipe理器每5分钟拨打一次服务 /*Alarm manager Service for From Server*/ private void setServerFetch() { // for to Server to GPS PING Intent myIntent1 = new Intent(LoginPage.this, AlarmService.class); pendingintent1 […]

Android:从callback中获得结果(networkingKOUSH ION)

对于我的应用程序,我需要从我们的服务器返回一些JSON联系我们的API。 在下载JSON时,它应该显示一个进度条。 我想我应该使用Android的AsyncTask来处理networking操作时的GUI,所以我在我的Activity写了如下内容: class DownloadManager extends AsyncTask<String, Void, Boolean> { @Override protected void onPreExecute() { super.onPreExecute(); mLoadingSpinner.setVisibility(View.VISIBLE); } @Override protected Boolean doInBackground(String… params) { String id = params[0]; downloadUtility.getId(id); return true; } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); mLoadingSpinner.setVisibility(View.INVISIBLE); } } 基本上, onPreExecute显示加载微调, doInBackGround下载一些JSON, onPostExecute停止微调。 问题是,在downloadUtility.getId(id)我需要: 如果下载成功,请打开一个新的意图。 如果下载失败,请继续保持相同的活动并显示错误信息。 getId的代码: public Future getId(final String id) […]