在JSP中,
include有分兩種
<%@include file="/footer.jsp" %><!-- 第一種 -->
<jsp:include page="/footer.jsp"></jsp:include><!-- 第二種 -->
第一種稱為
指令元素第二種稱為
動作元素差別在於
第一種的include會在編譯時期(轉換成servlet)就將file include進來,
而第二種在編譯時期並不會被編譯,是在client request時,才會動態的去載入在去編譯。
且第一種最後只會有一個.class檔案,
因為他會在被轉換成servlet之前就把include的file融合至原本的內容中
最後才轉換成servlet,故只有一個.class檔案
而第二種就會有兩種。
總結
第一種是在編譯時期就去include
第二種是在run time時期去include(這個效能似乎較差一點點,但較靈活)
恩,因緣際會下,
有人送我一台iMac,
當然不是平白無故的,
天底下沒有白吃的午餐!!
條件是要我part-time,寫iPhone app..
其實對我來說,沒有甚麼損失,多碰點東西!
之前一直局限於設備,雖然說可以用vmware來灌os x,
但一直沒動力,不過竟然有人要提供給我mac了,
我就順便接下來阿~~~~~
從一開始的mac book pro→mac mini→iMac
最後是拿到iMac
不過並不是全新的啦!
不過至少規格也不差!!!
至少比我目前的桌機好!
今天用了一下的心得就是
apple的滑鼠(magic mouse)真的很好用!!!!!
鍵盤也好打!!!!!!!
大螢幕也真的很爽(可惜不是27吋)
btw, 我今天一直找不到開機扭在哪裡(我好俗喔!!!)
底下是圖片~~~
|
magic mouse,好用! |
|
漂亮的螢幕 |
android detect screen on and screen off
android偵測螢幕的關閉與開啟,
和偵測sd card一樣,
Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON是不能在AndroidManifest.xml裡面宣告的
如:
<receiver android:name="receiverScreen">
<intent-filter>
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.SCREEN_OFF" />
</intent-filter>
</receiver>
這樣子的宣告
沒有用,你永遠都receive不到任何action
詳細原因我也不知道,但是可以透過registerReceiver去實作,
這裡舉個例子,先啟動一個service,由這個service去registerReceiver
由service啟動的好處是,service可以常駐,
如果你用acitivity去registerReceiver
這個acitivity關閉以後,你一樣receive不到任何action
且如果你只是想偵測acitivity的關閉與否的話,可以直接利用onResume和onPause去偵測即可
不用特地去registerReceiver
但是如果今天你有一個widget在桌面,
且我們是無法透過widget去registerReceiver,
會出現exception(ReceiverCallNotAllowedException)
所以一定得透過service去啟動。
service的code如下:
public class serviceScreen extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
try {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new receiverScreen();
registerReceiver(mReceiver, filter);
} catch (Exception e) {
Log.d("main",e.toString());
}
}
}
receiver的code如下:
public class receiverScreen extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
//收到螢幕開啟的通知
}else{
//收到螢幕關閉的通知
}
}
}
接著就是在widget中去startService
如下:
public class widgetSmall extends AppWidgetProvider {
@SuppressWarnings("static-access")
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
//啟動一個service
context.startService(new Intent(context, serviceScreen.class));
}
@SuppressWarnings("static-access")
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
//當這個widget被刪除時,就stopService
context.stopService(new Intent(context, serviceScreen.class) );
android.os.Process.killProcess(android.os.Process.myPid());
}
}