android 当在主线程里开启一个新线程 程序就崩溃

问题描述

android 当在主线程里开启一个新线程 程序就崩溃
我要实现的功能是检索SDcard里的所有txt文件
我尝试过很多办法

1 不用线程 直接在主线程里检索文件 由于有循环且检索时间会超过5秒 导致黑屏然后提示未响应
2 我建立一个线程让线程去检索文件当检索完毕后把检索到的文件传递给主类 主类再把检索到的文件显示在list上 但是当线程一启动程序就崩溃了
3 最后我在主类里添加handler 当子线程检索完毕就sendmessage给主类 然后主类把子线程检索到的文件显示在list上但程序还是崩溃 我没在子线程里操作UI
好像只要子线程里有循环程序就会崩溃

下面我把代码贴出来希望大家能帮帮我解决下这个问题
主类的主要代码
enter code here int jishuqi = 0;

ProgressDialog progress;jiansuothread thread;Intent intent;int[] leixing_xuanzhe;FileReader file;File fuwenjian;File fuwenjianxia[];String[] leixing = new String[] {""doc""pdf""xls""txt""jpg""ppt""};int i = 0;ArrayList<File[]>root = new ArrayList<File[]>();String xuanxiang [] = new String [] {""向上""编辑""添加""删除""};int ico [] = new int[] {R.drawable.xinjianR.drawable.xinjianR.drawable.xinjianR.drawable.xinjian};ListView list;Button xiangshang;Button bianji;Button tianjia;Button shanchu;View v;static ArrayList<File[]>jiansuoroot = new ArrayList<File[]>();static List<File>jiansuowenjian = new ArrayList<File>();static File fi;static ArrayList<File>wenjianjia = new ArrayList<File>();static ArrayList<File>ziwenjian = new ArrayList<File>();static ArrayList<File[]>ziwenjian1 = new ArrayList<File[]>();static ArrayList<File[]>rootwenjianjia = new ArrayList<File[]>();//jiansuowen js = new jiansuowen();//zixiancheng xiancheng = null;Handler hanlder;Handler handler = null;Handler childhandler = null;boolean jiansuowanbi = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    requestWindowFeature(Window.FEATURE_NO_TITLE);    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN WindowManager.LayoutParams.FLAG_FULLSCREEN);    setContentView(R.layout.activity_text);    xiancheng = new zixiancheng();            xiancheng.start();    v = (View)findViewById(R.id.view1);    intent = this.getIntent();    leixing_xuanzhe = intent.getIntArrayExtra(""leixing_xuanzhe"");    list = (ListView)findViewById(R.id.fileslist);    parse(leixing_xuanzhe);    list.setOnItemClickListener(new mylistitemclick());    xiangshang = (Button)findViewById(R.id.wj_xiangshang);    bianji = (Button)findViewById(R.id.wj_bianji);    tianjia = (Button)findViewById(R.id.wj_tianjia);    shanchu = (Button)findViewById(R.id.wj_shanchu);    xiangshang.setOnClickListener(new myClick());    bianji.setOnClickListener(new myClick());    tianjia.setOnClickListener(new myClick());    shanchu.setOnClickListener(new myClick());    //thread = new jiansuothread(this);    handler = new Handler() {        @Override        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            if(msg.what == 111) {                progress.cancel();                List<Map<StringObject>>listitems = new ArrayList<Map<StringObject>>();                for(int i= 0;i<jiansuowenjian.size();i++) {                    Map<StringObject>item = new HashMap<StringObject>();                    item.put(""icon""R.drawable.file );                    item.put(""name"" jiansuowenjian.get(i).getName());                    listitems.add(item);                }                SimpleAdapter adpter = new SimpleAdapter(TexlisttActivity.thislistitems  R.layout.list new String[] {""icon""name""} new int[] {R.id.iconR.id.listitem});                list.setAdapter(adpter);            }        }    };}`

子线程的代码
enter code here`
class zixiancheng extends Thread {
Message msg = null;
public void run() {
Looper.prepare();
childhandler = new Handler() {

            @Override            public void handleMessage(Message msg) {                // TODO Auto-generated method stub                if(msg.what == 222) {                try {                    for(int i =0; i<wenjianjia.size();i++) {                        jinasuo1(wenjianjia.get(i));                    }                    jiansuowanbi = true;                    msg = handler.obtainMessage();                    msg.what = 111;                    handler.sendMessage(msg);                } catch (Exception e) {                    // TODO: handle exception                }            }            }        };        Looper.loop();    }}
时间: 2024-12-03 22:04:04

android 当在主线程里开启一个新线程 程序就崩溃的相关文章

android-在安卓中开启一个新线程,发现如下代码中if块是DeadCode?为什么,如何解决?

问题描述 在安卓中开启一个新线程,发现如下代码中if块是DeadCode?为什么,如何解决? new Thread(){ public void run(){ try { sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } while(hasData < 100){ progressStatus = progressStatus + (i

【Android开发】线程与消息处理-开启一个新线程播放背景音乐

在本实例用,开启一个新的线程播放背景音乐,在音乐文件播放完毕后,暂停5秒后重新开始播放. 具体实现: 界面(只有一个"开始"按钮) res/layout/main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t

linux-Android在主线程里用handler循环ping命令固定次数会出现ioexception

问题描述 Android在主线程里用handler循环ping命令固定次数会出现ioexception 我做了一个ping百度的程序,使用的是handler循环.下面是循环体: private Handler handler = new Handler(); private Runnable task = new Runnable() { public void run() { // TODO Auto-generated method stub handler.postDelayed(this

android中UI主线程与子线程深入分析_Android

本文较为深入的分析了android中UI主线程与子线程.分享给大家供大家参考.具体如下: 在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的两种,除此之外还有Content Provider和Broadcast Receiver)都会跑在这个Process. 一个Android 程序默认情况下也只有一个Process,但一个Pr

android中UI主线程与子线程深入分析

本文较为深入的分析了android中UI主线程与子线程.分享给大家供大家参考.具体如下: 在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的两种,除此之外还有Content Provider和Broadcast Receiver)都会跑在这个Process. 一个Android 程序默认情况下也只有一个Process,但一个Pr

android应用开发详解里的一个例子

问题描述 android应用开发详解里的一个例子 我导入的书上例子可以运行,照着书打进去的代码就不能运行,同样从例子里面复制过来的代码也不能运行,MainActivity可以显示,但是点击register后跳转的ResultActivity就不能显示,模拟器弹出has stopped字样,求解答 以下是代码 package com.amaker.test; import android.app.Activity; import android.content.Intent; import and

主线程 如果判断 N个子线程都执行完了?

问题描述 需求:一个方法(主线程)开启了N个子线程,每个子线程去执行各自的任务,且执行的时间不一样,现在主线程需要将所有子线程执行完后的结果进行处理,并返回. 那如果判断所有的子线程都执行完了呢? 目前我的做法是: TestThread t2= new TestThread();TestThread t3= new TestThread();TestThread t1= new TestThread();System.out.println("start...");t1.start()

启动多个工作线程-下载图片一般都是单任务伦循。但是如果每次下载图片都开启一个工作线程会导致什么?

问题描述 下载图片一般都是单任务伦循.但是如果每次下载图片都开启一个工作线程会导致什么? 如题.工作线程起多了会导致什么?会不会导致内存益出.然后崩了? 解决方案 Android 一个下载任务分为多个线程下载unity 线程下载图片 解决方案二: 首先无限制创建线程是不可能的~不同的系统给的限制可能不同:有的是1M,有的更多~但绝不会出现分配线程过多导致死机的情形~ 解决方案三: 如果需要下载多个图片,用一个线程的多首先代码编写会方便一些,当然你把线程包装成方法,倒着没多大差别.接下来就讨论多线

C# 主线程传递参数给子线程

问题描述 我是用了一个类,然后传递参数过去,我想问下,主线程想要用到子线程算出的数据的话,然后在更新主线程界面,我是用的回调函数,然后回调的主线程函数还是子线程的.我想问下回调函数有啥子用啊,告诉主线程我子线程做完了,然后主线程开始调用?回调函数本身还是属于子线程的.如果说主线程需要用到子线程的值只能回调函数吗? 解决方案 解决方案二:可以解耦两个对象,类似事件一样