如何在一段时间间隔之后重复执行异步任务,就像Timer一样...实际上我正在开发一个应用程序,它会自动从服务器下载所有最新的未读问候语,为此我必须在修复后检查服务器的更新时间间隔....我知道可以通过计时器轻松完成,但我想使用异步任务,我认为对Android应用程序更有效.
我有疑问让我感到困惑.
想象一下,我想在另一个线程中做一些事情,比如获取GPS /位置内容,这些内容按照SDK文档中的建议,必须使用后台线程.
所以这里有一个问题:两者之间有什么区别
Thread通过AND在后台创建AsyncTask
创建Thread thread1 = new Thread(new Runnable()......并实施run()?
multithreading android runnable android-asynctask android-threading
我想AsyncTask从另一个AsyncTask线程中停止一个线程.我试图
new AsyncTask.cancel(true)阻止后台进程,但它没有停止.
有人可以帮我吗?
我对android中这种简单的常见情况有疑问.
我们有一个主要的活动,我们调用AsyncTask以及mainactivity的引用,以便AsyncTask可以更新MainActivity上的视图.
我将把事件分解为几步
上面的解决方案是按照"Pro Android 4"一书的建议在AsyncTask中保留WeakReference.
WeakReference<Activity> weakActivity;
in method onPostExecute
Activity activity = weakActivity.get();
if (activity != null) {
// do your stuff with activity here
}
Run Code Online (Sandbox Code Playgroud)
这是如何解决这种情况的?
我的问题是,如果我的asynctask正在下载10个文件,并且在完成5后重新启动活动(因为方向改变),那么我的FileDownloadingTask会再次被调用吗?
最初调用的先前AsyncTask会发生什么?
谢谢,我为问题的长度道歉.
我遇到过Handler和runOnUiThread概念.但对我来说,它们似乎仍然存在疑问,因为它们确实存在哪些不同之处.
它们都旨在从后台线程执行UI操作.但是,当我们在两种方法中进行选择时,要考虑的因素是什么.
例如,考虑一个Runnable Thread在后台执行Web服务的人,现在我想更新UI.
更新我的UI的最佳方法是什么?我应该去Handler还是runOnUiThread?
我仍然知道我可以使用AsyncTask并使用onPostExecute.但我只想知道其中的区别.
我一直在阅读与Android的互联网连接,并注意到有不同的方法来处理这个AsyncTask和IntentService.但是,我仍然不确定使用哪一个.我的应用程序基本上是一个位置/路径查找器与谷歌地图.我的互联网连接将用于查找地图某个半径范围内最近的路径.因此,每次用户将地图移动或滑动到新位置时,它都会使用最近的路径进行更新.它还将添加新的路径,并允许用户对路径进行评级.
是否AsyncTask足够或我应该使用IntentService?
我正在设计一个Android应用程序,需要执行以下步骤:
同步过程第一次运行时,可能需要10-20分钟.在初始同步之后,将传输和存储的数据更少,我希望该过程需要1-2分钟或更短时间.
我一直在阅读有关Android的AsyncTask各种内容以及使用服务的各种示例...但我并不完全理解选择一种设计而不是另一种设计的设计考虑和权衡.我目前使用AsyncTask将我的演示项目删除.观看(大部分)开发Android REST客户端应用程序之后:http: //code.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html#我对此处描述的设计模式感到困惑感觉过于复杂,也许是因为我只是"不明白".
我来自java,spring,web和桌面应用程序背景.对手持设备进行思考和设计对我来说是一个新手.(当屏幕布局发生变化时会发生什么?当我正在运行同步时手机响铃会发生什么?)如果初始同步IS将是一个如此长时间运行的过程,请退回2步,是否有更好的方法我要考虑问题 - >解决方案,用户体验,用户对手机上运行的应用程序的期望?
很想听听那些已经与这些问题搏斗的更有经验的Android开发者.
android background-process android-asynctask android-intentservice
我有以下课程:
public class getURLData extends AsyncTask<String, Integer, String>{
@Override
protected String doInBackground(String... params) {
String line;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(params[0]);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
line = EntityUtils.toString(httpEntity);
} catch (UnsupportedEncodingException e) {
line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
} catch (MalformedURLException e) {
line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
} catch (IOException e) {
line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
}
return line;
}
@Override …Run Code Online (Sandbox Code Playgroud) 使用execute()和有executeOnExecuter()什么区别?
execute()默认情况下如何执行任务?(串行还是并联?)
什么应该用于新的SDK> 16?
将并行执行(THREAD_POOL_EXECUTOR)用于任务而不是串行是一个好习惯,即使它对应用程序无关紧要,还是取决于AsyncTask将要执行的s 的数量?
我在Android中遇到以下错误的问题:
CalledFromWrongThreadException;:只有创建视图层次结构的原始线程才能触及其视图
它似乎发生在我尝试更新我的Activity中的Textview时,更新TextView的调用来自我的Activity,但我仍然得到上述错误.
我喜欢这样:
onCreate() - 设置按钮和文本视图.
onStateChange() - 一个关于状态更改通知的侦听器,当收到通知时,如果将TextView更改为说一些不同的文本.
当我收到新文本的通知时,我尝试更改TextView,如下所示:
((TextView)findViewById(R.id.title)).setText("Some Text");
Run Code Online (Sandbox Code Playgroud)
但是我得到了上面的错误.
从谷歌搜索它,似乎我应该使用处理程序来更改TextView或使用AsyncTask?
任何人都可以解释哪一个更好用,为什么?
编辑:新增代码片段:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.my);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_title);
((TextView)findViewById(R.id.time)).setText("Hello Text");
findViewById(R.id.keyboardimage).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"));
startActivity(dialIntent);
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.FLAG_SOFT_KEYBOARD));
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
}
});
}
Run Code Online (Sandbox Code Playgroud)
//CallBacks from running Service
private final ICallDialogActivity.Stub iCallDialogActivity = new ICallDialogActivity.Stub(){
@Override
public void onStateChanged(int callState)
throws RemoteException {
switch(callState){
case GlobalData.CALL_STATUS_IDLE:
break;
case GlobalData.CALL_STATUS_DISCONNECTING:
byeSetup();
break;
} …Run Code Online (Sandbox Code Playgroud)