之前推荐过 使用 Simple History 统计用户活动记录, 今天再介绍类似插件 WP-Activity。WP-Activity支持统计用户注册/登录、更新个人资料、新建/编辑/删除文章,发表评论,添加链接(WP 3.5+ 已移除链接管理功能)等事件,可以查看到用户的IP,还可以在登录失败多少次后自动将IP添加到黑名单。支持导出活动数据。支持通过小工具、简码或模板标签调用所有活动事件、以及已登录用户自己的活动。 WP-Activity 设置界面 记录用户活动 所有活动分类统计 注意事项 1.要开启“黑名单”功能,必须在“事件记录和订阅”下,勾选“记录登录失败” 2.要灵活调用各种数据,请认真阅读 FAQ 3.通过简码调用数据,测试时不生效,没时间深究 4.使用多说等第三方评论系统,貌似无法监控到评论事件 5.统计到的时间不准确,打开 wp-activity.php,找到(似乎有 12 处) 1 $act_time=current_time(’mysql’, true); $act_time=current_time(‘mysql’, true); 替换为 1 $act_time=current_time(’mysql’, 0); $act_time=current_time(‘mysql’, 0); 在后台插件安装界面搜索 WP-Activity 即可在线安装,或者下载 WP-Activity。已汉化该插件,下载简体中文包,解压后上传到该插件的 lang 目录即可。
Activity
在Activity之间传递复杂类型 Android开发技术
很多Android开发者对于Activity中如何传递复杂的类型不是很清楚,这里Android123再帮刚入门的开发者整理下。对于传递 一、实现Parcelable接口 对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的,对于二进制数据,传递的参数为putExtra(String name, Parcelable value) ,比如Bitmap类就实现了Parcelable接口,如果需要在Activity中传递图片,可以直接用Bitmap类型,当然如果本身是Drawable你可以先转化为Bitmap,可以参考 Bitmap和Drawable相互转换方法 一文。 相关的Intent方法还有 putExtra(String name, Parcelable[] value) // 传递一个Parcelable数组putExtra(String name, Bundle value) //传递一个Bundle对象 putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value) //传递一个实现Parcelable接口的对象数组putStringArrayListExtra(String name, ArrayList<String> value) //传递一个字符串数组putIntegerArrayListExtra(String name, ArrayList<Integer> value) //传递一个整形数组。 这里Android开发网提示大家,Integer这些装箱类型,Intent还实现了 putExtra(String name, int[] value) 这样的基础类型数组,同时Parcelable效率比标准的Java序列化更高,同时还被用作在AIDL中交换数据,所以掌握Parcelable这样的显示序列化技术,可以大幅提高数据交换性能。 二、使用全局单例模式 由于Android中Activity传递主要靠Intent这个类,Intent类内部传递数据的效率仍然需要拷贝,如果数据量很大,还可以考虑使用Singleton Pattern单例模式定义一个全局的静态类,这样传递的效率最高,大家可以看下Java设计模式,了解其中的妙用。 三、实现Serializable接口 如果你学习过传统的Java,则可以通过串行化技术,实现Serializable接口,其实这个原理和Parcelable差不多,均将自己的类转换为基本的类型比如说字节数组。在Android中不是很实用,这里不再赘述,在Intent中使用Intent putExtra(String name, […]
Android的Activity你知多少呢? Android开发技术
看到这个标题很多网友肯定回答,我知道Activity是Android上的窗口基类,了解Activity的生命周期比如onCreate onStop等,呵呵,按照这样说Android123还知道Activity的实现其实是从ApplicationContext,而ApplicationContext是从Context这个抽象类派生而来的,当然我们看到显示的是View或者ViewGroup,当然今天说的不是这些东西,而是很多网友来问的Android为什么不设计一个任务管理器,当然从Android 1.5开始ActivityManager类提供了restartPackage可以关闭一个程序,需要加上<uses-permission android:name="android.permission.RESTART_PACKAGES"/>这个权限,不过我们注意到,长按Home键可以看到以前程序的运行,同时可以快速的切换回来。这就是Android独有的程序生命周期管理机制 Activity历史栈。 我们在一个普通的程序主窗口A中打开了一个窗口B,而窗口B打开了窗口C,但是按下Back键后结果出乎了预期,是的这就是Activity的history stack的原因,在数据结构中栈是FIFO的,阻止我们不愿意看的情况的发生则可以在打开新Activity时加上标记FLAG_ACTIVITY_NO_HISTORY,代码如下: Intent i= new Intent(this, cwj.class); i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); //Android开发网提示大家相关的还有Intent.FLAG_ACTIVITY_CLEAR_TOP,都试试 startActivity(i); 当然更多的程序Activity控制可以再androidmanifest.xml中定义。
Activity类的runOnUiThread方法你用过吗 Android开发技术
如果你对于Android的Thread+Handler方式感觉繁琐,不妨试试Activity提供的另外一种简单的方法runOnUiThread,runOnUiThread可以帮助你在线程中执行UI更新操作,我们只需要在线程中写上类似 android123.this. runOnUiThread(new Runnable() { @Override public void run() { // refresh ui 的操作代码 } }); 这里需要注意的是runOnUiThread是Activity中的方法,在线程中我们需要告诉系统是哪个activity调用,所以前面显示的指明了activity。

Fragment对比Activity – Android碎片介绍 Android开发技术
Fragment是Android honeycomb 3.0新增的概念,Fragment名为碎片不过却和Activity十分相似,下面Android123介绍下Android Fragment的作用和用法。Fragment用来描述一些行为或一部分用户界面在一个Activity中,你可以合并多个fragment在一个单独的activity中建立多个UI面板,同时重用fragment在多个activity中.你可以认为fragment作为一个activity中的一节模块 ,fragment有自己的生命周期,接收自己的输入事件,你可以添加或移除从运行中的activity. 一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity而影响,举个例子吧,当activity暂停,那么所有在这个activity的fragments将被destroy释放。然而当一个activity在运行比如resume时,你可以单独的操控每个fragment,比如添加或删除。 Fragment作为Android 3.0的新特性,有些功能还是比较强大的,比如 合并两个Activity,如图 我们可以看到两个Activity通过两个Fragment合并到一个Activity的布局方式,对于平板等大屏幕设备来说有着不错的展示面板。不过因为Fragment和Activity的生命周期都比较复杂,我们分别对比下: 创建一个fragment你必须创建一个Fragment的子类或存在的子类,比如类似下面的代码 public static class Android123Fragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.android123_fragment, container, false); } } Fragment类的一些代码看起来有些像Activity为了让大家了解清楚,Android开发网给大家整理下Fragment的生命周期如上图所示,部分类似Activity的,我们详细解释 onCreate() 当fragment创建时被调用,你应该初始化一些实用的组件,比如在fragment暂停或停止时需要恢复的 onCreateView() 当系统调用fragment在首次绘制用户界面时,如果画一个UI在你的fragment你必须返回一个View当然了你可以返回null代表这个fragment没有UI. 那么如何添加一个Fragment到Activity中呢? Activity的布局可以这样写 <?xml version="1.0" […]

