首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android -如何让活动加载更快?

Android -如何让活动加载更快?
EN

Stack Overflow用户
提问于 2011-05-26 17:22:32
回答 1查看 5.7K关注 0票数 1

我目前在一个短信应用程序上工作,这将非常类似于股票短信应用程序。

但问题是,我的应用程序的加载速度比股票(内置)应用程序慢得多。

以下是我的应用程序代码:

代码语言:javascript
运行
复制
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, null, 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, null, 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;
}

}

我的自定义适配器:-

代码语言:javascript
运行
复制
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)加载列表,但在这两种情况下,我的应用程序加载都非常慢。如何更快地加载它?我可能更喜欢我的自定义适配器的解决方案,因为将来我可能需要在布局中添加一些东西,比如照片和其他东西。

谢谢。请帮帮我!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-26 17:30:24

可以使用http://developer.android.com/guide/developing/tools/traceview.html探查器来本地化性能问题。我猜问题在于您正在执行磁盘操作(Cursor cursor = getContentResolver().query(...))同步的。尝试使用AssyncTask进行此异步,即

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6136322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档