由于ListView在滑动过程中需要不停的接受广播,根据广播消息修改ListView中数据的状态,比如更新进度条。。
然后再不断滑动的过程中,刚开始滑动时候不会卡,到后来就一直会很卡。有没有好点的办法,尝试再滑动时,禁止发送端发送广播,并不可行,而且发送端的控制暂停发送的机制有bug,不一定能停止发送。public View getView(int position, View convertView, ViewGroup parent) {
if(!onRegister)
{
registerProgressChangeReceiver();//注册接受广播
}
View childView;
ExpandableListBackupHolder backupHolder = null;
if (convertView == null) {
Log.d("DLL","sjfsjfjs00000000000000000000000000");
childView = this.mInflater.inflate(this.mChildResourceId, parent, false);
mAllChildView.add(childView);
backupHolder = new ExpandableListBackupHolder();
mAllBackupHolder.add(backupHolder);
backupHolder.appName = (TextView) childView.findViewById(R.id.local_backup_name);
backupHolder.backupProgress = (ProgressBar) childView.findViewById(R.id.local_backup_progress);
backupHolder.checkBox = (ImageView) childView.findViewById(R.id.data_local_checkbox);
backupHolder.backupStatus = (TextView) childView.findViewById(R.id.local_backup_status);
backupHolder.backupStatus.setText(context.getString(R.string.text_waiting));
backupHolder.backupProgress.setMax(100);
childView.setTag(backupHolder);
if(stopBackupOrRestore)
{
Log.d("DLL","position 1111====" + position);
Log.d("DLL","backupOrRestore = " + backupOrRestore);
backupHolder.checkBox.setVisibility(View.VISIBLE);
backupHolder.checkBox.setImageResource(R.drawable.can_not_select);
if(backupOrRestore.equals("backup"))
{
backupHolder.backupStatus.setText(R.string.backup_fail);
}
else if(backupOrRestore.equals("restore"))
{
backupHolder.backupStatus.setText(R.string.restore_fail);
}
}
}
else {
//childView = convertView;
// backupHolder = (ExpandableListBackupHolder) childView.getTag();
// backupHolder.backupProgress = (ProgressBar)childView.findViewById(R.id.local_backup_progress);
//backupHolder.backupProgress.setVisibility(View.GONE);
if(position >= mAllBackupHolder.size())
{
childView = this.mInflater.inflate(this.mChildResourceId, parent, false);
mAllChildView.add(childView);
backupHolder = new ExpandableListBackupHolder();
mAllBackupHolder.add(backupHolder);
backupHolder.appName = (TextView) childView.findViewById(R.id.local_backup_name);
backupHolder.backupProgress = (ProgressBar) childView.findViewById(R.id.local_backup_progress);
backupHolder.checkBox = (ImageView) childView.findViewById(R.id.data_local_checkbox);
backupHolder.backupStatus = (TextView) childView.findViewById(R.id.local_backup_status);
backupHolder.backupStatus.setText(context.getString(R.string.text_waiting));
Log.d("DLL","sjfsjfjsfj11111111222222222222222222222222 =" + stopBackupOrRestore);
if(stopBackupOrRestore)
{
Log.d("DLL","position 2222====" + position);
Log.d("DLL","backupOrRestore = " + backupOrRestore);
backupHolder.checkBox.setVisibility(View.VISIBLE);
backupHolder.checkBox.setImageResource(R.drawable.can_not_select);
if(backupOrRestore.equals("backup"))
{
backupHolder.backupStatus.setText(R.string.backup_fail);
}
else if(backupOrRestore.equals("restore"))
{
backupHolder.backupStatus.setText(R.string.restore_fail);
}
}
}
else
{
Log.d("DLL","sjfsjfjs3333333333333333333333");
childView = mAllChildView.get(position);
backupHolder = mAllBackupHolder.get(position);
backupHolder.appName = (TextView) childView.findViewById(R.id.local_backup_name);
backupHolder.backupProgress = (ProgressBar) childView.findViewById(R.id.local_backup_progress);
backupHolder.checkBox = (ImageView) childView.findViewById(R.id.data_local_checkbox);
backupHolder.backupStatus = (TextView) childView.findViewById(R.id.local_backup_status);
}
}
// childView = this.mInflater.inflate(this.mChildResourceId, parent, false);
// backupHolder = new ExpandableListBackupHolder();
// childView.setTag(backupHolder);
String dataInfo = this.mUserDataName.get(position);
backupHolder.appName = (TextView) childView.findViewById(R.id.local_backup_name);
backupHolder.appName.setText(dataInfo);
// backupProgress = (ProgressBar) childView.findViewById(R.id.local_backup_progress);
// backupHolder.backupProgress.setMax(100);
// checkBox = (ImageView) childView.findViewById(R.id.data_local_checkbox);
// backupStatus = (TextView) childView.findViewById(R.id.local_backup_status);
// backupHolder.backupStatus.setText(context.getString(R.string.restore_complete));
Log.i(TAG, "backupProgress---->"+backupProgress);
if(list.size() > 0 ){
Log.i(TAG, "list" + position);
mapProcess.put(list.get(position).getComponentName(), backupHolder.backupProgress);
Log.d("NAME","appName ===" +list.get(position).getComponentName()+" processBar == "+backupHolder.backupProgress);
mapImageView.put(list.get(position).getComponentName(), backupHolder.checkBox);
mapTextView.put(list.get(position).getComponentName(), backupHolder.backupStatus);
}
return childView;
}
然后再不断滑动的过程中,刚开始滑动时候不会卡,到后来就一直会很卡。有没有好点的办法,尝试再滑动时,禁止发送端发送广播,并不可行,而且发送端的控制暂停发送的机制有bug,不一定能停止发送。public View getView(int position, View convertView, ViewGroup parent) {
if(!onRegister)
{
registerProgressChangeReceiver();//注册接受广播
}
View childView;
ExpandableListBackupHolder backupHolder = null;
if (convertView == null) {
Log.d("DLL","sjfsjfjs00000000000000000000000000");
childView = this.mInflater.inflate(this.mChildResourceId, parent, false);
mAllChildView.add(childView);
backupHolder = new ExpandableListBackupHolder();
mAllBackupHolder.add(backupHolder);
backupHolder.appName = (TextView) childView.findViewById(R.id.local_backup_name);
backupHolder.backupProgress = (ProgressBar) childView.findViewById(R.id.local_backup_progress);
backupHolder.checkBox = (ImageView) childView.findViewById(R.id.data_local_checkbox);
backupHolder.backupStatus = (TextView) childView.findViewById(R.id.local_backup_status);
backupHolder.backupStatus.setText(context.getString(R.string.text_waiting));
backupHolder.backupProgress.setMax(100);
childView.setTag(backupHolder);
if(stopBackupOrRestore)
{
Log.d("DLL","position 1111====" + position);
Log.d("DLL","backupOrRestore = " + backupOrRestore);
backupHolder.checkBox.setVisibility(View.VISIBLE);
backupHolder.checkBox.setImageResource(R.drawable.can_not_select);
if(backupOrRestore.equals("backup"))
{
backupHolder.backupStatus.setText(R.string.backup_fail);
}
else if(backupOrRestore.equals("restore"))
{
backupHolder.backupStatus.setText(R.string.restore_fail);
}
}
}
else {
//childView = convertView;
// backupHolder = (ExpandableListBackupHolder) childView.getTag();
// backupHolder.backupProgress = (ProgressBar)childView.findViewById(R.id.local_backup_progress);
//backupHolder.backupProgress.setVisibility(View.GONE);
if(position >= mAllBackupHolder.size())
{
childView = this.mInflater.inflate(this.mChildResourceId, parent, false);
mAllChildView.add(childView);
backupHolder = new ExpandableListBackupHolder();
mAllBackupHolder.add(backupHolder);
backupHolder.appName = (TextView) childView.findViewById(R.id.local_backup_name);
backupHolder.backupProgress = (ProgressBar) childView.findViewById(R.id.local_backup_progress);
backupHolder.checkBox = (ImageView) childView.findViewById(R.id.data_local_checkbox);
backupHolder.backupStatus = (TextView) childView.findViewById(R.id.local_backup_status);
backupHolder.backupStatus.setText(context.getString(R.string.text_waiting));
Log.d("DLL","sjfsjfjsfj11111111222222222222222222222222 =" + stopBackupOrRestore);
if(stopBackupOrRestore)
{
Log.d("DLL","position 2222====" + position);
Log.d("DLL","backupOrRestore = " + backupOrRestore);
backupHolder.checkBox.setVisibility(View.VISIBLE);
backupHolder.checkBox.setImageResource(R.drawable.can_not_select);
if(backupOrRestore.equals("backup"))
{
backupHolder.backupStatus.setText(R.string.backup_fail);
}
else if(backupOrRestore.equals("restore"))
{
backupHolder.backupStatus.setText(R.string.restore_fail);
}
}
}
else
{
Log.d("DLL","sjfsjfjs3333333333333333333333");
childView = mAllChildView.get(position);
backupHolder = mAllBackupHolder.get(position);
backupHolder.appName = (TextView) childView.findViewById(R.id.local_backup_name);
backupHolder.backupProgress = (ProgressBar) childView.findViewById(R.id.local_backup_progress);
backupHolder.checkBox = (ImageView) childView.findViewById(R.id.data_local_checkbox);
backupHolder.backupStatus = (TextView) childView.findViewById(R.id.local_backup_status);
}
}
// childView = this.mInflater.inflate(this.mChildResourceId, parent, false);
// backupHolder = new ExpandableListBackupHolder();
// childView.setTag(backupHolder);
String dataInfo = this.mUserDataName.get(position);
backupHolder.appName = (TextView) childView.findViewById(R.id.local_backup_name);
backupHolder.appName.setText(dataInfo);
// backupProgress = (ProgressBar) childView.findViewById(R.id.local_backup_progress);
// backupHolder.backupProgress.setMax(100);
// checkBox = (ImageView) childView.findViewById(R.id.data_local_checkbox);
// backupStatus = (TextView) childView.findViewById(R.id.local_backup_status);
// backupHolder.backupStatus.setText(context.getString(R.string.restore_complete));
Log.i(TAG, "backupProgress---->"+backupProgress);
if(list.size() > 0 ){
Log.i(TAG, "list" + position);
mapProcess.put(list.get(position).getComponentName(), backupHolder.backupProgress);
Log.d("NAME","appName ===" +list.get(position).getComponentName()+" processBar == "+backupHolder.backupProgress);
mapImageView.put(list.get(position).getComponentName(), backupHolder.checkBox);
mapTextView.put(list.get(position).getComponentName(), backupHolder.backupStatus);
}
return childView;
}
解决方案 »
- android客户端的后台服务器开发环境用Eclipse还是MyEclipse ?
- 求教技术大牛逆天的进程与广播的问题
- 关于RSS订阅器 求交流
- 关于contentprovider中的openAssetFile(Uri uri, String mode)和openFile(Uri uri, String
- android下开发游戏程序,界面也是用java的swing开发吗?
- 求问,现在定做一个安卓的的APP多少钱?
- 点击dialog之外的区域,dailog消失
- Socket用模拟器在PC上调试成功,但是在Android真机上不行。
- android 实现两个activity跳转时的书籍翻页效果
- TabLayout 使用过程中出现的一些问题
- 安卓 怎么修改文件的属性呀。
- android Spinner
你想实现什么功能以至于用到广播?如果只是更新进度条和改变listview中数据的话,完全不需要用到广播。
你往下滑发送广播,往上滑需要发送广播,滑到哪广播发到哪,不占内存才怪,不卡才怪
是的 整个机制有问题,整个机制是这样的: 后台起一个线程,线程中处理数据,当处理数据的时候,通过handler将当前的数据传入主线程,并在主线程中发送广播,通过广播接收界面进度条的长度百分比。
这样做我觉得很有问题,但是这不是我做的,我是改正别人bug的,如果要机制需要动的东西比较多,项目吃紧暂时不准备动