Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在某些手机上缓慢加载自定义listview并强制关闭_Android_Multithreading_Listview_Asynchronous - Fatal编程技术网

Android 在某些手机上缓慢加载自定义listview并强制关闭

Android 在某些手机上缓慢加载自定义listview并强制关闭,android,multithreading,listview,asynchronous,Android,Multithreading,Listview,Asynchronous,我的listview有12个项目和12张图片,大小为600*600,在android emulator上,我看到以下日志: I/art﹕ Background sticky concurrent mark sweep GC freed 12(432B) AllocSpace objects, 0(0B) LOS objects, 0% free, 45MB/45MB, paused 32.860ms total 102.481ms I/art﹕ Backgroun

我的listview有12个项目和12张图片,大小为600*600,在android emulator上,我看到以下日志:

     I/art﹕ Background sticky concurrent mark sweep GC freed 12(432B)      AllocSpace objects, 0(0B) LOS objects, 0% free, 45MB/45MB, paused 32.860ms total 102.481ms
      I/art﹕ Background partial concurrent mark sweep GC freed 21(928B) AllocSpace objects, 1(3MB) LOS objects, 3% free, 51MB/53MB, paused 5.177ms total 96.504ms
      I/art﹕ Background partial concurrent mark sweep GC freed 43(1664B) AllocSpace objects, 1(3MB) LOS objects, 3% free, 54MB/56MB, paused 1.513ms total 104.015ms
       I/Choreographer﹕ Skipped 296 frames!  The application may be doing too much work on its main thread.
          I/Choreographer﹕ Skipped 65 frames!  The application may be doing too much work on its main thread.
不幸的是,这个警告在某些手机上导致了错误(我认为可能是内存不足)

下面是我列表视图的代码,我在谷歌上搜索了上面的错误,知道我必须使用线程。你们能帮我做一下吗

      public class ItemActivity extends ActionBarActivity implements Variable {




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.album_list);



     populatecantactlist();//fill listview with my item
     registerClickCallback();//What to do when click on item




    }



private void populatecantactlist() {


    ListView listview=(ListView)findViewById(R.id.list);

    ArrayAdapter<String> adapter=new mylistAdapter();

    listview.setAdapter(adapter);

}

public class mylistAdapter extends ArrayAdapter<String>{

    private  mylistAdapter(){
        super(AlbumActivity.this,R.layout.album_list_item,albumnames);
    }


    @Override
    public View getView(int position,View convertView,ViewGroup parent){

        View item_view=convertView;

        if(item_view== null){

            item_view=getLayoutInflater().inflate(R.layout.album_list_item,parent,false);
        }

        ImageView iv=(ImageView)item_view.findViewById(R.id.imageView1);


        iv.setImageResource(icon_num[position]);

        TextView tv1=(TextView)item_view.findViewById(R.id.txt_name);
        tv1.setText(albumnames[position]);

        return item_view;}

}







private void registerClickCallback() {

    ListView list=(ListView)findViewById(R.id.list);
    list.setOnItemClickListener(new OnItemClickListener() {
        //I want to after on each item select go to new activity which populate with
        //information about new album

        @Override
        public void onItemClick(AdapterView<?> parent, View viewclicked,
                                int position, long id) {

            Intent i2=new Intent("com.example.ItemActivity");




            Bundle extras=new Bundle();
            extras.putInt("PositionItemClicked", position);
            i2.putExtras(extras);


            startActivity(i2);


        }});
}
公共类ItemActivity扩展ActionBarActivity实现变量{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.album_列表);
PopulateCanActList();//用我的项目填充listview
registerClickCallback();//单击项时要做什么
}
私有void populateCanActList(){
ListView ListView=(ListView)findViewById(R.id.list);
ArrayAdapter=新的mylistAdapter();
setAdapter(适配器);
}
公共类mylistAdapter扩展了ArrayAdapter{
私有mylistAdapter(){
超级(AlbumActivity.this,R.layout.album\u list\u项,AlbumName);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图项_View=convertView;
如果(项目视图==null){
item_view=GetLayoutFlater().充气(R.layout.album_list_item,父项,false);
}
ImageView iv=(ImageView)项_view.findViewById(R.id.imageView1);
iv.setImageResource(图标数量[位置]);
TextView tv1=(TextView)item_view.findViewById(R.id.txt_name);
tv1.setText(相册名称[位置]);
返回项_视图;}
}
私有无效注册表ClickCallback(){
ListView列表=(ListView)findViewById(R.id.list);
list.setOnItemClickListener(新的OnItemClickListener(){
//我想在每个项目上选择“转到新活动”,该活动以
//关于新专辑的信息
@凌驾
公共视图单击(AdapterView父级,视图单击,
内部位置,长id){
意图i2=新意图(“com.example.ItemActivity”);
Bundle extras=新Bundle();
额外输入(“PositionItemClicked”,位置);
i2.临时演员(临时演员);
星触觉(i2);
}});
}
更新:我使用下面的异步,但它有错误:

       public class MyAsync extends AsyncTask<Void,String,Void>{


    @Override
    protected Void doInBackground(Void... params) {
        iv.setImageResource(icon_num[position]);
        return null;

    }

    @Override
    protected void onPreExecute() {

    }
}
公共类MyAsync扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…参数){
iv.setImageResource(图标数量[位置]);
返回null;
}
@凌驾
受保护的void onPreExecute(){
}
}

您是否尝试在asynktask中加载适配器?我搜索asynctask,刚刚找到加载url图像的方法,您能帮我吗?只在asynktask中添加您的方法。在onPostExecute中