1.android ANR机制(Application No Responding)
一般是主线程在一定时间内无响应(5s)会引发ANR异常
通常解决办法是在该主线程开一个子线程来处理耗时较长的事物
主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。以这种方式设计你的应用程序,将能保证你的主线程保持对输入的响应性并能避免由于5秒输入事件的超时引发的ANR对话框。这种做法应该在其它显示UI的线程里效仿,因为它们都受相同的超时影响。
并在页面放置一个progressbar提示进度框。
2.android IPC机制 (Inter-Process communication)
Handler 和AIDL
Handler一般是处理子线程,UI线程为主线程,Handler是配合UI线程来处理数据的
IPC机制主要是通过IBinder接口去实现的,如果希望对象能被其它进程访问,那就必须实现IBinder接口,可以指向本地也可以指向远程(AIDL)
其基本模型是C/S模型
3.横竖切屏时Activity的生命周期
竖屏切换成横屏时:
05-10 05:24:53.910: I/System.out(316): onSaveInstanceState()....
05-10 05:24:53.910: I/System.out(316): onPause()....
05-10 05:24:53.920: I/System.out(316): onStop()....
05-10 05:24:53.920: I/System.out(316): onDestroy()....
05-10 05:24:53.940: I/System.out(316): onCreate()....
05-10 05:24:54.051: I/System.out(316): onStart()....
05-10 05:24:54.090: I/System.out(316): onRestoreInstanceState()....
05-10 05:24:54.090: I/System.out(316): onResume()....
按Home键:
05-10 05:30:55.051: I/System.out(353): onSaveInstanceState()....
05-10 05:30:55.051: I/System.out(353): onPause()....
05-10 05:30:55.970: I/System.out(353): onStop()....
重新进入:
05-10 05:31:41.231: I/System.out(353): onRestart()....
05-10 05:31:41.231: I/System.out(353): onStart()....
05-10 05:31:41.241: I/System.out(353): onResume()....
按返回键:
05-10 05:32:09.990: I/System.out(353): onPause()....
05-10 05:32:10.660: I/System.out(353): onStop()....
05-10 05:32:10.660: I/System.out(353): onDestroy()....
重新进入:
05-10 05:32:23.740: I/System.out(353): onCreate()....
05-10 05:32:23.900: I/System.out(353): onStart()....
05-10 05:32:23.930: I/System.out(353): onResume()....
4.Broadcastreceiver
注意的问题:
1)如果是费时操作,最好在onReceive()方法中启动一个线程处理该事件,防止被系统kill
2)启动一个线程仍然有可能被系统判断为不活跃而被kill
解决办法是:启动一个服务去处理
注册方式有两种:
4.1 代码注册
receiver = new KalusReceiver();
IntentFilter filter = new IntentFilter(KalusReceiver.FILTER);
registerReceiver(receiver, filter);
一般在onStart中注册在onStop中去注销unregisterReceiver(receiver);
4.2 在AndroidManifest文件中配置
application之间
<receiver android:name=".KalusReceiver">
<intent-filter>
<action android:name="com.kalus.receiver.RECEIVER"/>
</intent-filter>
</receiver>
在onReceive中启动服务service只能用startService(intent)
如果用context.bindService(service, conn, Context.BIND_AUTO_CREATE);会报错
错误如下:IntentReceiver components are not allowed to bind to service
"123".startsWith("") //true
求素数:
for(int i=2;i<1000;i++){
boolean f = true;
for(int j=2;j<=i/2;j++){
if(i%j==0){
f = false;
break;
}
}
if(f){
System.out.println(i);
}