Android意图服务onClick,或启动新活动,然后Asynctask

时间:2014-03-04 17:18:19

标签: android android-intent android-asynctask broadcastreceiver android-intentservice

在Android应用程序中,用户多次单击按钮/视图并启动新活动,新活动会在用户之前查看的位置弹出,并加载数据。

当用户在下一个活动开始之前点击按钮时,如果数据开始加载(来自网络或磁盘或两者),那么从用户的角度来看是否会有任何差异?然后,该数据被返回到广播接收器中的新活动。

将此与在活动的oncreate中启动过程进行比较。假设这些网络和I / O进程只需要几毫秒,如果方法是在新活动的onCreate中启动,或者在旧活动onClick上启动,它会对用户产生影响。

第一种方式,在I / O完成后启动I / O并更改视图

//first activity
public void onClick(View v){
     startActivity(new Intent(this, NewActivity.class);
}

//NewActivity.class
onCreate(Bundle mBundle){
   super.onCreate(mBundle);
setContentView(R.layout.mView);
mObject = networkCall();  //after network call, the view objects in this layout will reflect data from the network call

}

第二种方式,在第一个活动中启动I / O

//first activity
public void onClick(View v){
     IntentService networkCall = new IntentService();
     //start network call

     startActivity(new Intent(this, NewActivity.class);
}

//second activity on create just sets the view and also broadcast receiver

我的GUESS是,在弹出活动所需的瞬间,来自意向服务的数据可以变得可用。但与此同时,通过意图传递数据可能需要同样长的时间才能使收益微不足道

洞察力赞赏

1 个答案:

答案 0 :(得分:1)

根据我的经验,当您调用startActivity()时,几乎可以立即调用新活动的onCreate()。新活动没有以正确的方式显示,因为它需要花费时间来渲染您的布局。

您可以使用Log.d()函数自行处理计时。像Log.d(TAG,“This happen at at:”+ System.currentTimeMillis());在代码中的不同点,看看事情何时发生。在您的应用运行时观看LogCat,您可以自行决定哪种方式更好。