运行的异步任务在里面的Andr​​oid计时器 [英] Running an Async Task Inside a timer in Android

查看:314
本文介绍了运行的异步任务在里面的Andr​​oid计时器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的一个基本的聊天类型的应用程序,并在present我运行code,如下:

 类GetMsgs扩展的AsyncTask<字符串,字符串,字符串> {
        @覆盖
        在preExecute保护无效(){
            super.on preExecute();
            pDialog =新ProgressDialog(MsgViewActivity.this);
            pDialog.setMessage(读取..);
            pDialog.setIndeterminate(假);
            pDialog.setCancelable(真);
            pDialog.show();
        }        @覆盖
        保护字符串doInBackground(字符串...为arg0){
            意向意图= getIntent();
            字符串TMP = intent.getStringExtra(头);
            清单<&的NameValuePair GT; PARAMS =新的ArrayList<&的NameValuePair GT;();
            params.add(新BasicNameValuePair(页眉,TMP));
            //获取JSON对象
            //注意,创建产品网址接受POST方法
            JSON = jsonParser.makeHtt prequest(URL,
                        POST,则params);            返回null;
        }        保护无效onPostExecute(字符串FILE_URL){
            pDialog.dismiss();
            ListView控件listView_msg =(ListView控件)findViewById(R.id.MsgView);
            INT J = 0;
            字符串邮件和附件[];
            尝试{
                封邮件= json.getJSONArray(信息);
                AUTHS = json.getJSONArray(作者);
                ID = json.getString(ID);
                封邮件=新的String [msgs.length()];
                的for(int i = 0; I< msgs.length();我++){
                    如果((msgs.getString(ⅰ)=!)及及(auths.getString(ⅰ)=!)){
                        封邮件[J ++] = auths.getString(I)+:+ msgs.getString(ⅰ);
                    }
                }
                msg_adapter =新ArrayAdapter<串GT;(MsgViewActivity.this,
                        android.R.layout.simple_list_item_1,消息);
                listView_msg.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
                listView_msg.setAdapter(msg_adapter);
            }
            赶上(JSONException E){
                e.printStackTrace();
            }
        }    }

就象这样:

 新GetMsgs()执行();

在我这运行在Android和甚至在一个按钮点击事件的开始,它的工作原理和完美的执行。但后来,当我试图在给定的时间间隔运行此刷新消息屏幕,应用程序崩溃。

我试过,我在这里找到了办法:
我)如何设置的android 定时器
II) Android的计时器?怎么样?

不过,我不断收到一个应用程序崩溃。

这难道不是可以运行在特定的时间区间code出于某种原因,或者是一些实施过程中的问题。

一些帮助将AP preciated。

logcat的:

  11月4日至六日:45:40.396:V /供应商/设置(5644):无效[系统]:目前的286 = 0缓存
11月4日至6日:45:40.406:V /供应商/设置(5644):从数据库高速缓存,名称= sound_effects_enabled值= 1
11月4日至6日:45:40.407:V / InputMethodManager(5644):事件的内容:android.widget.EditText@41c27350 mServedView=android.widget.EditText@41c27350 winFocus =真
11月4日至6日:45:40.456:D / dalvikvm(5644):创建插值螺纹:堆栈大小32KB =
11月4日至6日:45:40.456:D / dalvikvm(5644):创建新的线程
11月4日至6日:45:40.456:D / dalvikvm(5644):创建新的线程
11月4日至6日:45:40.456:D / dalvikvm(5644):更新线程列表
11月4日至6日:45:40.456:D / dalvikvm(5644):主题ID = 11:插值堆在0x52af2000
11月4日至6日:45:40.457:D / dalvikvm(5644):主题ID = 11:从插值创建
11月4日至6日:45:40.457:D / dalvikvm(5644):启动新的线程
11月4日至6日:45:40.457:D / dalvikvm(5644):主题ID = 11:通知调试器
11月4日至6日:45:40.457:D / dalvikvm(5644):主题ID = 11(AsyncTask的#1):调用的run()
11月4日至6日:45:40.529:V / InputMethodManager(5644):启动输入:view=android.widget.TabHost@41c23ab0
11月4日至6日:45:40.529:V / InputMethodManager(5644):启动输入:tba=android.view.inputmethod.EditorInfo@41c68d80 IC = NULL
11月4日至6日:45:40.529:V / InputMethodManager(5644):启动输入:android.widget.TabHost@41c23ab0 IC = NULL t​​ba=android.view.inputmethod.EditorInfo@41c68d80 controlFlags =#100
11月4日至6日:45:40.531:V / InputMethodManager(5644):启动输入:绑定result=InputBindResult{com.android.internal.view.IInputMethodSession$Stub$Proxy@41c698a0 com.touchtype.swiftkey / com.touchtype.KeyboardService #4807}
11月4日至6日:45:40.534:V / InputMethodManager(5644):onWindowFocus:空softInputMode = 288 =首真正标志=#1820002
11月4日至6日:45:40.534:V / InputMethodManager(5644):不IME目标窗口,忽略
11月4日至6日:45:40.540:D / dalvikvm(5644):主题ID = 12:插值堆在0x537ff000
11月4日至6日:45:40.542:D / libc的,NetBSD的(5644)的getaddrinfo:myphptestsite.bugs3.com获得代理&GT导致;>
11月4日至6日:45:40.549:我/的System.out(5644):为PropertyValue:真
11月4日至6日:45:40.550:我/的System.out(5644):[插座] [0]连接/93.188.160.82:80;LocalPort=45152(0)
11月4日至6日:45:40.551:我/的System.out(5644):[CDS]连接[/93.188.160.82:80] TM:90
11月4日至6日:45:40.552:D / POSIX(可5644):Posix_connect调试]进程com.example.groupchat:80
11月4日至6日:45:40.925:I / SurfaceTextureClient(5644):STC :: queueBuffer(这一点:0x51247728)FPS:11.83,DUR:1014.51,最高:391.89,最低:15.83
11月4日至6日:45:41.562:I / SurfaceTextureClient(5644):STC :: queueBuffer(这一点:0x52afe8e0)FPS:54.92,DUR:1001.41,最高:60.19,最低:7.67
11月4日至6日:45:41.912:我/的System.out(5644):连接[插座] [100.69.10.243:45152 /]
11月4日至6日:45:41.913:我/的System.out(5644):[CDS] RX时限:0
11月4日至6日:45:41.922:我/的System.out(5644):> doSendRequest
11月4日至6日:45:41.930的:I /的System.out(5644):或其可doSendRequest
11月4日至6日:45:42.573:I / SurfaceTextureClient(5644):STC :: queueBuffer(这一点:0x52afe8e0)FPS:56.37,DUR:1011.19,最高:23.49,最低:12.03
11月4日至6日:45:43.365:D / dalvikvm(5644):GC_CONCURRENT释放211K,免费12%13462K / 15171K,暂停2MS + 2ms的,总17MS
11月4日至6日:45:43.372:D / OpenGLRenderer(5644):刷新缓存(模式0)
11月4日至6日:45:43.439:I / SurfaceTextureClient(5644):STC :: queueBuffer(这一点:0x51247728)FPS:5.57,DUR:2514.10,最高:2279.30,最低:12.11
11月4日至6日:45:43.455:V / InputMethodManager(5644):onWindowFocus:android.widget.ListView@41c2fd98 softInputMode = 16 =第一假标志=#1810100
11月4日至6日:45:43.456:V / InputMethodManager(5644):启动输入:view=android.widget.ListView@41c2fd98
11月4日至6日:45:43.456:V / InputMethodManager(5644):启动输入:tba=android.view.inputmethod.EditorInfo@41bf0db8 IC = NULL
11月4日至6日:45:43.456:V / InputMethodManager(5644):启动输入:android.widget.ListView@41c2fd98 IC = NULL t​​ba=android.view.inputmethod.EditorInfo@41bf0db8 controlFlags =#101
11月4日至6日:45:43.458:V / InputMethodManager(5644):启动输入:绑定result=InputBindResult{com.android.internal.view.IInputMethodSession$Stub$Proxy@41c0ada8 com.touchtype.swiftkey / com.touchtype.KeyboardService #4808}
11月4日至6日:45:45.101:D / VelocityTracker(5644):无法打开的/ dev /触摸'(没有这样的文件或目录)
11月4日至6日:45:45.101:D / VelocityTracker(5644):TPD读出用X失败:错误的文件数
11月4日至6日:45:45.101:D / VelocityTracker(5644):TPD读出用Y失败:错误的文件数
11月4日至6日:45:45.260:I / SurfaceTextureClient(5644):STC :: queueBuffer(这一点:0x51247728)FPS:1.65,DUR:1821.68,最高:1796.98,最低:9.99
11月4日至6日:45:46.205:V /供应商/设置(5644):从设置缓存,名称= sound_effects_enabled值= 1
11月4日至6日:45:46.262:I / SurfaceTextureClient(5644):STC :: queueBuffer(这一点:0x51247728)FPS:3.00,DUR:1001.27,最高:782.15,最低:67.85
11月4日至6日:45:46.464:D / AbsListView(5644):checkAbsListViewlLogProperty得到无效的命令
11月4日至6日:45:46.468:D / dalvikvm(5644):创建插值螺纹:堆栈大小32KB =
11月4日至6日:45:46.468:D / dalvikvm(5644):创建新的线程
11月4日至6日:45:46.469:D / dalvikvm(5644):创建新的线程
11月4日至6日:45:46.469:D / dalvikvm(5644):更新线程列表
11月4日至6日:45:46.469:D / dalvikvm(5644):主题ID = 13:插值堆在0x51cc3000
11月4日至6日:45:46.469:D / dalvikvm(5644):主题ID = 13:来自插值创建
11月4日至6日:45:46.469:D / dalvikvm(5644):启动新的线程
11月4日至6日:45:46.470:D / dalvikvm(5644):主题ID = 13:通知调试器
11月4日至6日:45:46.470:D / dalvikvm(5644):主题ID = 13(定时器0):调用的run()
11月4日至6日:45:46.470:D / dalvikvm(5644):主题ID = 13:退出
11月4日至6日:45:46.471:W / dalvikvm(5644):主题ID = 13:螺纹未捕获的异常退出(组= 0x40f1e908)
11月4日至6日:45:46.473:E / AndroidRuntime(5644):致命异常:定时器0
11月4日至6日:45:46.473:E / AndroidRuntime(5644):了java.lang.RuntimeException:无法内螺纹已不叫尺蠖prepare创造处理器()
11月4日至6日:45:46.473:E / AndroidRuntime(5644):在android.os.Handler<&初始化GT;(Handler.java:121)
11月4日至6日:45:46.473:E / AndroidRuntime(5644):在android.app.Dialog<&初始化GT;(Dialog.java:107)
11月4日至6日:45:46.473:E / AndroidRuntime(5644):在android.app.AlertDialog<&初始化GT;(AlertDialog.java:114)
11月4日至6日:45:46.473:E / AndroidRuntime(5644):在android.app.AlertDialog<&初始化GT;(AlertDialog.java:98)
11月4日至6日:45:46.473:E / AndroidRuntime(5644):在android.app.ProgressDialog<&初始化GT;(ProgressDialog.java:77)
11月4日至6日:45:46.473:E / AndroidRuntime(5644):在com.example.groupchat.MsgViewActivity $ GetMsgs.on preExecute(MsgViewActivity.java:100)
11月4日至6日:45:46.473:E / AndroidRuntime(5644):在android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
11月4日至6日:45:46.473:E / AndroidRuntime(5644):在android.os.AsyncTask.execute(AsyncTask.java:534)
11月4日至6日:45:46.473:E / AndroidRuntime(5644):在com.example.groupchat.MsgViewActivity $ 1.run(MsgViewActivity.java:57)
11月4日至6日:45:46.473:E / AndroidRuntime(5644):在java.util.Timer中的$ TimerImpl.run(Timer.java:284)
11月4日至6日:45:46.482:V / InputMethodManager(5644):事件的内容:android.widget.ListView@41c2fd98 mServedView=android.widget.ListView@41c2fd98 winFocus = FALSE
11月4日至6日:45:46.493:V / InputMethodManager(5644):不IME目标窗口,忽略
11月4日至6日:45:46.675:D / OpenGLRenderer(5644):刷新缓存(模式0)
11月4日至6日:45:46.838:D / OpenGLRenderer(5644):刷新缓存(模式0)
11月4日至6日:45:48.058:D / OpenGLRenderer(5644):刷新缓存(模式0)
11月4日至6日:45:48.071:D / OpenGLRenderer(5644):刷新缓存(模式0)
11月4日至6日:45:48.074:D / OpenGLRenderer(5644):刷新缓存(模式1)

工作code:

 公共无效callAsynchronousTask(){
        最后的处理程序处理程序=新的处理程序();
        定时器定时器=新的Timer();
        TimerTask的doAsynchronousTask =新的TimerTask(){
            @覆盖
            公共无效的run(){
                handler.post(新的Runnable(){
                    公共无效的run(){
                        尝试{
                            GetMsgs performBackgroundTask =新GetMsgs();
                            // PerformBackgroundTask这个类是扩展AsynchTask类
                            performBackgroundTask.execute();
                        }赶上(例外五){
                            // TODO自动生成catch块
                        }
                    }
                });
            }
        };
        timer.schedule(doAsynchronousTask,0,1000 * 10); //每50000毫秒执行
    }


解决方案

重要删除code
 新GetMsgs()执行(); 结果
 从定时,并开始在你活动的onCreate方法和摧毁你的活动的方法阻止你的异步任务

 类GetMsgs扩展的AsyncTask<字符串,字符串,字符串> {   布尔标志= FALSE;
    @覆盖
    在preExecute保护无效(){
        super.on preExecute();
        标志=真实的;
  }    @覆盖
    保护字符串doInBackground(字符串...为arg0){
        而(标志)
        {
            publishProgress(开始);            //你的code你的待办事项inBackground在做什么            尝试
            {
                视频下载(3000); //你的时间间隔后要刷新屏幕
            }
            赶上(InterruptedException的E)
            {
            }
            publishProgress(停止);        }
        返回null;
    }
    @覆盖
    保护无效onProgressUpdate(字符串值...)
    {
        super.onProgressUpdate(值);
        如果(值[0] .equalsIgnoreCase(开始))
        {
            //在它创建对话框
            //在这里做你在preExecute做了什么
        }
        否则,如果(值[0] .equalsIgnoreCase(停止))
        {
            // code您在onPostExecute正在做
        }    }
   @覆盖
    保护无效onCancelled(){
        // TODO自动生成方法存根
        super.onCancelled();
        标志= FALSE;
    }
}

I am working on a basic chat-type application and at present I am running the code, given below :

class GetMsgs extends AsyncTask<String, String, String> {


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MsgViewActivity.this);
            pDialog.setMessage("Fetching..");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... arg0) {
            Intent intent = getIntent();
            String tmp = intent.getStringExtra("Header");
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("Header", tmp));
            // getting JSON Object
            // Note that create product url accepts POST method
            json = jsonParser.makeHttpRequest(url,
                        "POST", params); 

            return null;
        }

        protected void onPostExecute(String file_url) {
            pDialog.dismiss();
            ListView listView_msg = (ListView)findViewById(R.id.MsgView);
            int j = 0;
            String Msgs[];
            try{
                msgs = json.getJSONArray("Messages");
                auths = json.getJSONArray("Authors");
                id = json.getString("ID");
                Msgs = new String[msgs.length()];
                for(int i = 0; i < msgs.length(); i++){
                    if ((msgs.getString(i) != "")&&(auths.getString(i) != "")){
                        Msgs[j++] = auths.getString(i) + " : " + msgs.getString(i);
                    }
                }
                msg_adapter = new ArrayAdapter<String>(MsgViewActivity.this,
                        android.R.layout.simple_list_item_1, Msgs);
                listView_msg.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
                listView_msg.setAdapter(msg_adapter);
            }       
            catch(JSONException e){
                e.printStackTrace();
            }
        }

    }   

as this :

new GetMsgs().execute();

When I run this at the start of the event in android and even at a button click, it works and performs perfectly. But then when I tried to run this at a given interval to refresh the message screen, the application crashes.

I've tried the approach I've found here: i) How to set a timer in android ii) Android timer? How?

But I keep getting an app-crash.

Is it not possible to run the code at specific intervals for some reason, or is it some implementational problem.

Some help will be appreciated.

LOGCAT:

04-06 11:45:40.396: V/Provider/Setting(5644): invalidate [system]: current 286 != cached 0
04-06 11:45:40.406: V/Provider/Setting(5644): from db cache, name = sound_effects_enabled value = 1
04-06 11:45:40.407: V/InputMethodManager(5644): focusOut: android.widget.EditText@41c27350 mServedView=android.widget.EditText@41c27350 winFocus=true
04-06 11:45:40.456: D/dalvikvm(5644): create interp thread : stack size=32KB
04-06 11:45:40.456: D/dalvikvm(5644): create new thread
04-06 11:45:40.456: D/dalvikvm(5644): new thread created
04-06 11:45:40.456: D/dalvikvm(5644): update thread list
04-06 11:45:40.456: D/dalvikvm(5644): threadid=11: interp stack at 0x52af2000
04-06 11:45:40.457: D/dalvikvm(5644): threadid=11: created from interp
04-06 11:45:40.457: D/dalvikvm(5644): start new thread
04-06 11:45:40.457: D/dalvikvm(5644): threadid=11: notify debugger
04-06 11:45:40.457: D/dalvikvm(5644): threadid=11 (AsyncTask #1): calling run()
04-06 11:45:40.529: V/InputMethodManager(5644): Starting input: view=android.widget.TabHost@41c23ab0
04-06 11:45:40.529: V/InputMethodManager(5644): Starting input: tba=android.view.inputmethod.EditorInfo@41c68d80 ic=null
04-06 11:45:40.529: V/InputMethodManager(5644): START INPUT: android.widget.TabHost@41c23ab0 ic=null tba=android.view.inputmethod.EditorInfo@41c68d80 controlFlags=#100
04-06 11:45:40.531: V/InputMethodManager(5644): Starting input: Bind result=InputBindResult{com.android.internal.view.IInputMethodSession$Stub$Proxy@41c698a0 com.touchtype.swiftkey/com.touchtype.KeyboardService #4807}
04-06 11:45:40.534: V/InputMethodManager(5644): onWindowFocus: null softInputMode=288 first=true flags=#1820002
04-06 11:45:40.534: V/InputMethodManager(5644): Not IME target window, ignoring
04-06 11:45:40.540: D/dalvikvm(5644): threadid=12: interp stack at 0x537ff000
04-06 11:45:40.542: D/libc-netbsd(5644): getaddrinfo: myphptestsite.bugs3.com get result from proxy >>
04-06 11:45:40.549: I/System.out(5644): propertyValue:true
04-06 11:45:40.550: I/System.out(5644): [socket][0] connection /93.188.160.82:80;LocalPort=45152(0)
04-06 11:45:40.551: I/System.out(5644): [CDS]connect[/93.188.160.82:80] tm:90
04-06 11:45:40.552: D/Posix(5644): [Posix_connect Debug]Process com.example.groupchat :80 
04-06 11:45:40.925: I/SurfaceTextureClient(5644): [STC::queueBuffer] (this:0x51247728) fps:11.83, dur:1014.51, max:391.89, min:15.83
04-06 11:45:41.562: I/SurfaceTextureClient(5644): [STC::queueBuffer] (this:0x52afe8e0) fps:54.92, dur:1001.41, max:60.19, min:7.67
04-06 11:45:41.912: I/System.out(5644): [socket][/100.69.10.243:45152] connected
04-06 11:45:41.913: I/System.out(5644): [CDS]rx timeout:0
04-06 11:45:41.922: I/System.out(5644): >doSendRequest
04-06 11:45:41.930: I/System.out(5644): <doSendRequest
04-06 11:45:42.573: I/SurfaceTextureClient(5644): [STC::queueBuffer] (this:0x52afe8e0) fps:56.37, dur:1011.19, max:23.49, min:12.03
04-06 11:45:43.365: D/dalvikvm(5644): GC_CONCURRENT freed 211K, 12% free 13462K/15171K, paused 2ms+2ms, total 17ms
04-06 11:45:43.372: D/OpenGLRenderer(5644): Flushing caches (mode 0)
04-06 11:45:43.439: I/SurfaceTextureClient(5644): [STC::queueBuffer] (this:0x51247728) fps:5.57, dur:2514.10, max:2279.30, min:12.11
04-06 11:45:43.455: V/InputMethodManager(5644): onWindowFocus: android.widget.ListView@41c2fd98 softInputMode=16 first=false flags=#1810100
04-06 11:45:43.456: V/InputMethodManager(5644): Starting input: view=android.widget.ListView@41c2fd98
04-06 11:45:43.456: V/InputMethodManager(5644): Starting input: tba=android.view.inputmethod.EditorInfo@41bf0db8 ic=null
04-06 11:45:43.456: V/InputMethodManager(5644): START INPUT: android.widget.ListView@41c2fd98 ic=null tba=android.view.inputmethod.EditorInfo@41bf0db8 controlFlags=#101
04-06 11:45:43.458: V/InputMethodManager(5644): Starting input: Bind result=InputBindResult{com.android.internal.view.IInputMethodSession$Stub$Proxy@41c0ada8 com.touchtype.swiftkey/com.touchtype.KeyboardService #4808}
04-06 11:45:45.101: D/VelocityTracker(5644): Couldn't open '/dev/touch' (No such file or directory)
04-06 11:45:45.101: D/VelocityTracker(5644): tpd read x fail: Bad file number
04-06 11:45:45.101: D/VelocityTracker(5644): tpd read y fail: Bad file number
04-06 11:45:45.260: I/SurfaceTextureClient(5644): [STC::queueBuffer] (this:0x51247728) fps:1.65, dur:1821.68, max:1796.98, min:9.99
04-06 11:45:46.205: V/Provider/Setting(5644): from settings cache , name = sound_effects_enabled value = 1
04-06 11:45:46.262: I/SurfaceTextureClient(5644): [STC::queueBuffer] (this:0x51247728) fps:3.00, dur:1001.27, max:782.15, min:67.85
04-06 11:45:46.464: D/AbsListView(5644): checkAbsListViewlLogProperty get invalid command
04-06 11:45:46.468: D/dalvikvm(5644): create interp thread : stack size=32KB
04-06 11:45:46.468: D/dalvikvm(5644): create new thread
04-06 11:45:46.469: D/dalvikvm(5644): new thread created
04-06 11:45:46.469: D/dalvikvm(5644): update thread list
04-06 11:45:46.469: D/dalvikvm(5644): threadid=13: interp stack at 0x51cc3000
04-06 11:45:46.469: D/dalvikvm(5644): threadid=13: created from interp
04-06 11:45:46.469: D/dalvikvm(5644): start new thread
04-06 11:45:46.470: D/dalvikvm(5644): threadid=13: notify debugger
04-06 11:45:46.470: D/dalvikvm(5644): threadid=13 (Timer-0): calling run()
04-06 11:45:46.470: D/dalvikvm(5644): threadid=13: exiting
04-06 11:45:46.471: W/dalvikvm(5644): threadid=13: thread exiting with uncaught exception (group=0x40f1e908)
04-06 11:45:46.473: E/AndroidRuntime(5644): FATAL EXCEPTION: Timer-0
04-06 11:45:46.473: E/AndroidRuntime(5644): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
04-06 11:45:46.473: E/AndroidRuntime(5644):     at android.os.Handler.<init>(Handler.java:121)
04-06 11:45:46.473: E/AndroidRuntime(5644):     at android.app.Dialog.<init>(Dialog.java:107)
04-06 11:45:46.473: E/AndroidRuntime(5644):     at android.app.AlertDialog.<init>(AlertDialog.java:114)
04-06 11:45:46.473: E/AndroidRuntime(5644):     at android.app.AlertDialog.<init>(AlertDialog.java:98)
04-06 11:45:46.473: E/AndroidRuntime(5644):     at android.app.ProgressDialog.<init>(ProgressDialog.java:77)
04-06 11:45:46.473: E/AndroidRuntime(5644):     at com.example.groupchat.MsgViewActivity$GetMsgs.onPreExecute(MsgViewActivity.java:100)
04-06 11:45:46.473: E/AndroidRuntime(5644):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
04-06 11:45:46.473: E/AndroidRuntime(5644):     at android.os.AsyncTask.execute(AsyncTask.java:534)
04-06 11:45:46.473: E/AndroidRuntime(5644):     at com.example.groupchat.MsgViewActivity$1.run(MsgViewActivity.java:57)
04-06 11:45:46.473: E/AndroidRuntime(5644):     at java.util.Timer$TimerImpl.run(Timer.java:284)
04-06 11:45:46.482: V/InputMethodManager(5644): focusOut: android.widget.ListView@41c2fd98 mServedView=android.widget.ListView@41c2fd98 winFocus=false
04-06 11:45:46.493: V/InputMethodManager(5644): Not IME target window, ignoring
04-06 11:45:46.675: D/OpenGLRenderer(5644): Flushing caches (mode 0)
04-06 11:45:46.838: D/OpenGLRenderer(5644): Flushing caches (mode 0)
04-06 11:45:48.058: D/OpenGLRenderer(5644): Flushing caches (mode 0)
04-06 11:45:48.071: D/OpenGLRenderer(5644): Flushing caches (mode 0)
04-06 11:45:48.074: D/OpenGLRenderer(5644): Flushing caches (mode 1)

Working code :

 public void callAsynchronousTask() {
        final Handler handler = new Handler();
        Timer timer = new Timer();
        TimerTask doAsynchronousTask = new TimerTask() {       
            @Override
            public void run() {
                handler.post(new Runnable() {
                    public void run() {       
                        try {
                            GetMsgs performBackgroundTask = new GetMsgs();
                            // PerformBackgroundTask this class is the class that extends AsynchTask 
                            performBackgroundTask.execute();
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                        }
                    }
                });
            }
        };
        timer.schedule(doAsynchronousTask, 0, 1000*10); //execute in every 50000 ms
    }

解决方案

Important remove code new GetMsgs().execute();
from the Timer and start it in the onCreate method of your activity and on Destroy method of your activity stop your async task

 class GetMsgs extends AsyncTask<String, String, String> {

   boolean flag = false;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        flag = true;
  }

    @Override
    protected String doInBackground(String... arg0) {
        while(flag)
        {
            publishProgress("start");

            //Your Code what you are doing in the Do inBackground

            try 
            {
                Thread.sleep(3000);//Your Interval after which you want to refresh the screen
            }
            catch (InterruptedException e) 
            {
            }
            publishProgress("stop");

        }
        return null;
    }
    @Override
    protected void onProgressUpdate(String... values) 
    {
        super.onProgressUpdate(values);
        if(values[0].equalsIgnoreCase("start"))
        {
            //Create Your Dialog in it
            //Do here what you are doing in the onPreExecute    
        }
        else if(values[0].equalsIgnoreCase("stop"))
        {
            //Code you are doing in the onPostExecute
        }

    }
   @Override
    protected void onCancelled() {
        // TODO Auto-generated method stub
        super.onCancelled();
        flag = false;
    }
}   

这篇关于运行的异步任务在里面的Andr​​oid计时器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆