3

我一直在阅读很多答案来解决这个问题,但不知何故我没有得到一个合适的解决方案。我是一个初学者,可能是因为这个原因。

我正在通过单击活动 A 的按钮创建一个新活动 B。B 有很多 UI。所以加载大约需要 10 秒。它显示一个黑屏直到。

public class B extends Activity
{


    Dialog dialog_sec1__participant_name;
    Dialog dialog_sec1__fathers_name;
    Dialog dialog_sec1_address;
    .
    .
    .
    .
    //lot more
    Button btn_section_preview;
    Button btn_sec1_address;
    .
    .
    //lot more


    CustomObj mObject = null;
    CustomObj2 mObject2 = null;
    .
    .
    .



    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.B);

    mObject = new CustomObj();
    mObject2 = new CustomObj();
    .
    .



    txt_sec1_preview_household_id=(TextView)findViewById(R.id.a11);
    txt_sec1_preview_date_of_interview=(TextView)findViewById(R.id.a22);
    txt_sec1_preview_time_of_interview=(TextView)findViewById(R.id.a33);
    .
    .
    .
    // Lot more, including setting view to Dialog.

    .
    .
    .
    // and lot of onclick listners

      btn_section_preview.setOnClickListener(new View.OnClickListener()
          {

            @Override
            public void onClick(View arg0)
            {
                //doing my job here
            }
        });
         .
         .
         .
         .

此视图中有很多 UI 组件。我现在的结构是这样的。现在 ,

  1. 如何减少加载时间?
  2. 如果上面的方法不是好方法,有什么好方法(实践)来做。

请指导我。

4

3 回答 3

1

如果您有大约 200 个从上到下排列的元素,您可以尝试使用 ListView,它会为您处理延迟加载。因此,在开始一个活动时,您将只加载可见元素。或者尝试使用另一种方法来实现延迟加载,以 ViewStub 为例。所以这里的主要思想是划分你的布局并允许它部分加载。

于 2013-02-01T06:32:11.447 回答
0

如果您的活动需要 10 秒才能加载,则在某些情况下您必须达到 ANR 限制 ( http://developer.android.com/training/articles/perf-anr.html )。

如果没有有关您的 UI 的详细信息,我只能推测并提供一些一般性提示:

  • 不要一次初始化所有对话框。为什么还要初始化每个对话框?为什么你甚至需要多个对话框实例?为什么不等到对话框被触发再创建关联对象呢?为什么不只保留对当前/最后一个显示而不是所有显示的引用?
  • 你说你有很多 OnClickListeners。确保使用单个 OnClickListener 对象并简单地将引用传递给多个视图。这样,您只创建一个对象,而不是多个可能会影响性能的对象。
  • 您在 onCreate() 中所做的任何事情都会减慢 Activity 的启动速度,因此请限制您在那里所做的工作。如果一开始不需要它,那么稍后再初始化它!
  • 不惜一切代价避免在 onCreate() / UI 线程中阻塞调用。也就是说,任何网络调用或数据库调用。根据您的示例,您似乎很好......但是延迟 10 秒,必须假设您在 onCreate() 调用中进行了阻塞调用(或者可能是 onStart()/onResume() ?)。如果需要,请使用 AsyncTask/Thread。

有关支持文档,请查看http://developer.android.com/training/articles/perf-tips.html#ObjectCreation(对象创建从来都不是免费的!)另外,我知道它已经被推荐了,但是布局优化如果您的 UI 很复杂,这非常重要:http: //developer.android.com/training/improving-layouts/index.html

希望有帮助!祝你好运

于 2013-03-01T05:52:55.740 回答
0

在 UI 加载之前,您可以使用进度条。您还应该阅读优化布局的最佳实践。

于 2013-02-01T06:34:46.797 回答