当前位置: 编程技术>移动开发
本页文章导读:
▪让一个Activity唯有一个自定义Toast 让一个Activity只有一个自定义Toast
package com.wxlh.ptas.ui;
import android.content.Context;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.wxlh.pt.........
▪ AsyncTask 的施行顺序很重要 AsyncTask 的执行顺序很重要
@Override
protected ListAdapter initListViewAdapter() {
Log.e("--------------", "执行--0");
new AsynchTaskRequestData().execute();
Log.e("--------------", "执行--99");
mAdapter = new DailContactAdapte.........
▪ 内存储器管理 内存管理
内存管理可以说是 iPhone 开发中最重要也最令人头疼的关键点。CocoaChina 版主“lvyile”总结了内存管理中最应注意的事项,分别是: 通过分配或复制创建的对象保持计数为 1;假设任.........
[1]让一个Activity唯有一个自定义Toast
来源: 互联网 发布时间: 2014-02-18
让一个Activity只有一个自定义Toast
package com.wxlh.ptas.ui; import android.content.Context; import android.view.Gravity; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.wxlh.ptas.R; public class TextToast { private Context context; private Toast toast; public TextToast(Context context) { this.context = context; toast = new Toast(context); } private Toast getToast() { if (null == toast) { toast = new Toast(context); } return toast; } public void show(Context context, String msg) { Toast toast = getToast(); TextView textOverlay = new TextView(context); LinearLayout mLinearLayout = new LinearLayout(context); mLinearLayout.setBackgroundResource(R.drawable.bg_hitchar); textOverlay.setText(msg); textOverlay.setTextColor(R.color.white); textOverlay.setTextSize(70); textOverlay.setWidth(100); textOverlay.setMinWidth(100); textOverlay.setPadding(10, 10, 10, 10); textOverlay.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL); mLinearLayout.addView(textOverlay); toast.setView(mLinearLayout); toast.setDuration(Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); toast.show(); } }
调用:
1. private TextToast textToast; 2.textToast = new TextToast(this); 3.textToast.show(DailContact.this, element.substring(0, 1));
[2] AsyncTask 的施行顺序很重要
来源: 互联网 发布时间: 2014-02-18
AsyncTask 的执行顺序很重要
@Override protected ListAdapter initListViewAdapter() { Log.e("--------------", "执行--0"); new AsynchTaskRequestData().execute(); Log.e("--------------", "执行--99"); mAdapter = new DailContactAdapter(this, cInfos, listTag); Log.e("--------------", "执行--100"); return mAdapter; } private class AsynchTaskRequestData extends AsyncTask<Integer, Void, List<ContactInfo>> { @Override protected List<ContactInfo> doInBackground(Integer... params) { Log.e("--------------", "执行--1"); try { Log.e("--------------", "执行--2"); Thread.sleep(PtasApplication.THREAD_SLEEP_TIME); } catch (InterruptedException e) { Log.e(DailContact.this.getClass().getName(), "InterruptedException", e); } Log.e("--------------", "执行--3"); return ContactHolder.getContactInfosSort(DailContact.this, getWhere(), getOrder(), listTag); } @Override protected void onPreExecute() { Log.e("--------------", "执行--4"); commonList.addFooterView(loadingView); } @Override protected void onPostExecute(List<ContactInfo> currentCInfos) { Log.e("--------------", "执行--5"); if (cInfos.size() == 0) { displayText.setVisibility(View.VISIBLE); } if (currentCInfos.size() == 0) { if (cInfos.size() == 0) { displayText.setVisibility(View.VISIBLE); } commonList.removeFooterView(loadingView); return; } displayText.setVisibility(View.GONE); Log.e("--------------", "执行--6"); cInfos.addAll(currentCInfos); mAdapter.notifyDataSetChanged(); mAdapter.initSections(currentCInfos); sections = mAdapter.getSections(); commonList.removeFooterView(loadingView); Log.e("--------------", "执行--7"); } }
日志记录如下:
12-08 01:00:16.854: E/--------------(571): 执行--0 12-08 01:00:16.873: E/--------------(571): 执行--4 12-08 01:00:16.894: E/--------------(571): 执行--99 12-08 01:00:16.894: E/--------------(571): 执行--100 12-08 01:00:16.923: E/--------------(571): 执行--1 12-08 01:00:16.923: E/--------------(571): 执行--2 12-08 01:00:18.724: I/MapActivity(571): Handling network change notification:CONNECTED 12-08 01:00:18.724: E/MapActivity(571): Couldn't get connection factory client 12-08 01:00:18.924: E/--------------(571): 执行--3 12-08 01:00:27.484: D/dalvikvm(571): GC_FOR_MALLOC freed 9497 objects / 335464 bytes in 85ms 12-08 01:00:34.383: D/dalvikvm(571): GC_FOR_MALLOC freed 12655 objects / 473528 bytes in 75ms 12-08 01:00:38.203: D/dalvikvm(571): GREF has increased to 201 12-08 01:00:40.334: E/--------------(571): 执行--5 12-08 01:00:40.334: E/--------------(571): 执行--6 12-08 01:00:40.684: E/--------------(571): 执行--7 12-08 01:00:42.954: D/dalvikvm(571): GC_FOR_MALLOC freed 12275 objects / 499120 bytes in 71ms
结论:如果要在Adapter中处理一些数据,并且将其放在了new Adapter()的构造方法中,这是很危险的,因为在数据还没有处理完成的时候,Adapter 已经被new出来了,在对其进行的后续操作都是都是null。
结论:执行顺序 onPreExecute-->doInBackground-->onPostExecute AsyncTask<Integer, Void, List<ContactInfo>> 第一个是指 doInBackground中接收的参数的类型 第二个是指onProgressUpdate中接收的参数的类型 第三个是每日doInBackground返回值的类型以及onPostExecute接收的参数的类型
[3] 内存储器管理
来源: 互联网 发布时间: 2014-02-18
内存管理
内存管理可以说是 iPhone 开发中最重要也最令人头疼的关键点。CocoaChina 版主“lvyile”总结了内存管理中最应注意的事项,分别是: 通过分配或复制创建的对象保持计数为 1;假设任何别的方法获取的对象保持计数为1, 而且在自动释放池中,要想在当前执行范围外使用该对象,就必须保持它;向集合添加对象时它就被保持,从集合移走对象时就被释放。释放集合对象(如 NSArray )会释放该集合当中所有的对象;确保有多少个 alloc, copy, mutableCopy 或 retain 消息就有多少 release 或 autorelease 消息发送给该对象。换句话说,确保您代码的平衡;在访问方法设置属性时先保持,再释放;在程序中用 @"..." 结构创建的 NSString 对象是有效常量,向它们发送 retain 或者 release 消息没有用;使用便利构造方法创建的对象(如 NSString 的 stringWithFormat )可以被认为会自动释放;在使用你自己的参数实例时,需要实现 -dealloc 方法来释放。
最新技术文章: