Android-如何使活动加载更快?

问题描述

| 我目前正在开发一个与股票短信应用非常相似的短信应用。 但是问题是我的应用程序加载速度比普通(内置)应用程序慢。 这是我的应用程序代码:-
public class ThreadData extends ListActivity
{
private static final Uri SMS_URI = Uri.parse(\"content://sms\");
ArrayList<String> bodies = new ArrayList<String>();
MySMSAdapter adapter;
String name;

public void onCreate(Bundle bundle)
{
    super.onCreate(bundle);
    setContentView(R.layout.threadlist);
    Bundle extras = getIntent().getExtras();
    if(extras != null)
    {
        name = extras.getString(\"address\");
    }
    Cursor cursor = getContentResolver().query(SMS_URI,null,\"date ASC\");
    startManagingCursor(cursor);
    while (cursor.moveToNext())
    {
        String Id = cursor.getString(cursor.getColumnIndex(\"_id\"));
        String address = cursor.getString(cursor.getColumnIndex(\"address\"));
        String body = cursor.getString(cursor.getColumnIndexOrThrow(\"body\"));
        String personName = getPersonName(Id,address);
        if(personName.equals(name))
        {
            bodies.add(body);
        }
    }
    //adapter = new MySMSAdapter(this,bodies);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.sms_inbox,R.id.row,bodies);
    ListView listView = getListView();
    listView.setAdapter(adapter);
}
public String getPersonName(String id,String address)
{
        if(id==null)
        {
            if(address != null)
            {
                return PhoneNumberUtils.formatNumber(address);
            }
            else
            {
                return null;
            }
        }

        Cursor c = this.getContentResolver().query(Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,address),new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME },null);

        if(c != null)
        {
            try
            {
                if(c.getCount() > 0)
                {
                    c.moveToFirst();
                    return c.getString(0);
                }
            }
            finally
            {
                c.close();
            }
        }
        if(address != null)
        {
            return PhoneNumberUtils.formatNumber(address);
        }
        return null;
}

}
我的自定义适配器:-
public class MySMSAdapter extends BaseAdapter
{
private Activity activity;
private ArrayList<String> data;
LayoutInflater inflater;

public MySMSAdapter(Activity a,ArrayList<String> arrayList)
{
    activity = a;
    data = arrayList;
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public int getCount()
{
    return data.size();  //To change body of implemented methods use File | Settings | File Templates.
}

public Object getItem(int i)
{
    return data.get(i);  //To change body of implemented methods use File | Settings | File Templates.
}

public long getItemId(int i)
{
    return i;
}

public static class ViewHolder
{
    public TextView textView;
}

public View getView(final int i,View view,ViewGroup viewGroup)
{
    View row = view;
    final ViewHolder holder;
    if(view==null)
    {
        row = inflater.inflate(R.layout.sms_inbox,viewGroup,false);
        holder = new ViewHolder();
        holder.textView = (TextView)row.findViewById(R.id.row);
        row.setTag(holder);
    }
    else
    {
        holder = (ViewHolder)row.getTag();
    }

    holder.textView.setText(data.get(i));
    return row;
}
}
在我的课堂上,我尝试使用两个选项(自定义适配器和ArrayAdapter)加载List,但在两种情况下,我的应用程序加载速度都很慢。如何更快地加载?我可能更喜欢我的自定义适配器的解决方案,因为将来我可能需要在照片中添加一些东西,例如照片和其他东西。 谢谢。请帮忙!!     

解决方法

您可以使用http://developer.android.com/guide/developing/tools/traceview.html探查器来定位性能问题。我的猜测是您正在同步执行磁盘操作(光标游标= getContentResolver()。query(...))。尝试使用AssyncTask使此异步,即     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...