前言

之前了解過android的AOP框架,用法主要用來打日志;現(xiàn)在有一個需求需要函數(shù)在新線程中執(zhí)行,并且函數(shù)主體執(zhí)行完之后,在UI線程返回結(jié)果。想到手寫的話,每次都要new Thread的操作,比較麻煩;因此就嘗試用注解的方法解決這個問題。
AspectJ的使用核心就是它的編譯器,它就做了一件事,將AspectJ的代碼在編譯期插入目標(biāo)程序當(dāng)中,運行時跟在其它地方?jīng)]什么兩樣,因此要使用它最關(guān)鍵的就是使用它的編譯器去編譯代碼ajc。ajc會構(gòu)建目標(biāo)程序與AspectJ代碼的聯(lián)系,在編譯期將AspectJ代碼插入被切出的PointCut中,已達到AOP的目的。
因此,無論在什么IDE上(如果使用命令行就可以直接使用ajc編譯了),問題就是讓IDE使用ajc作為編譯器編譯代碼。
代碼實現(xiàn)
注解使用
代碼主要通過TraceLog、RunOnNewThread、RunOnNewThreadWithUICallback這三個注解與AOP容器關(guān)聯(lián)。使用方法如下:
@TraceLog
@RunOnNewThread
public void checkAndRestartDownloadTask(final boolean isAutoCache) {
DownloadManager.getInstance().startService(isAutoCache);
}
@TraceLog
@RunOnNewThreadWithUICallback
public Boolean isShowTipsForFirstVideoCache(DBQueryCallback<Boolean> callback) {
if (!PreferenceClient.is_first_video_cache_done.getBoolean() &&
(DownloadManager.getInstance().getFinishedTaskSize(true, false) > 0 ||
DownloadManager.getInstance().getFinishedTaskSize(true, true) > 0)) {
PreferenceClient.is_first_video_cache_done.setBoolean(true);
return true;
}
return false;
}
網(wǎng)頁名稱:AndroidAOP框架AspectJ使用詳解-創(chuàng)新互聯(lián)
文章來源:http://www.chinadenli.net/article26/dccjjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、企業(yè)網(wǎng)站制作、響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計、定制網(wǎng)站、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容