亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求android或java大神解答下這個小bug

求android或java大神解答下這個小bug

夏Jue 2016-12-23 23:05:18
是這樣的,我的android程序中打開了一個activity,里面進去后就是用File對象 file.list()方法讀取指定目錄中的所有文件然后顯示到GridView中,有一個小bug,比如我的目錄下有大量文件,file.list()方法執行速度就會很慢,一直到能顯示到GridView中需要一段時間,如果在還未獲取完成時退出了該activity,但是它的獲取操作可能還在繼續,獲取完后才會被回收?如果在該次操作(file.list獲取文件)還沒有完成并回收前再次進入該activity,則又會重新開始一次操作(file.list獲取文件),導致更慢,所以我如何能在該activity執行onDestroy的時候終止掉這里面的操作?(file.list獲取文件)求大俠解答,或提供思路,由衷感謝!如果您沒接觸過android,但是知道java的話,我就簡單闡述下,能不能終止掉File對象中的.list方法,
查看完整描述

3 回答

已采納
?
alionSSS

TA貢獻57條經驗 獲得超82個贊

拿一個子線程去執行file.list(),然后onDestroy的時候打斷子線程,這樣可以嗎?

查看完整回答
1 反對 回復 2016-12-24
  • 夏Jue
    夏Jue
    謝謝你的回答,根據你的思路基本解決了這個問題.這幾天寫太多代碼寫暈了把它想復雜了,我把AsyncTask終止就可以了
  • alionSSS
    alionSSS
    多休息休息!解決了就好!
?
謙謙佳人

TA貢獻29條經驗 獲得超7個贊

線程在未完成任務時,你是無法去強行讓它停止的。

對于java封裝好的api,你必須得繼承File類 ?然后重寫listFiles() 方法,如圖

http://img1.sycdn.imooc.com//585e291e0001c26809580332.jpg

直接將這個代碼塊拷過來就行,然后在其中的for循環第一行就加上activity的銷毀判斷

if(activity == null || activity.isFinishing()){

????return null;

}


查看完整回答
1 反對 回復 2016-12-24
  • 夏Jue
    夏Jue
    謝謝你的回答!這個我倒是從來沒想到過,受教了.
  • 夏Jue
    夏Jue
    你上面的listFiles方法我查看了下,這個方法一開始就調用了list()方法,而list方法是調用了 private static native String[] listImpl(String path);,表示是一個外部方法,沒辦法看源碼,應該也無法用java實現,所以也無法在里面的循環中添加條件控制,所以很遺憾也是不行的,不過非常感謝您提供的這個思路,相信對我以后的開發有很大幫助的.
  • 謙謙佳人
    謙謙佳人
    好吧,我也沒試過,只是這樣的方式比直接停止線程要靠譜一些。
點擊展開后面1
?
一條小咸魚

TA貢獻457條經驗 獲得超255個贊

再開一個線程?

查看完整回答
反對 回復 2016-12-24
  • 夏Jue
    夏Jue
    原本就是異步執行了,根據樓上的提醒把異步終止就可以了,謝謝你們的回答
  • 3 回答
  • 0 關注
  • 1828 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號