优化首页加载时间;

完美版,以后更新随缘;
pull/144/head
于俊 1 year ago
parent ce45c82b76
commit b77d2f5bec
  1. 15
      .github/workflows/test.yml
  2. 45
      app/src/main/java/com/github/tvbox/osc/viewmodel/SourceViewModel.java
  3. 3
      gradle.properties

@ -89,6 +89,7 @@ jobs:
sed -i '$a\RELEASE_KEY_ALIAS=TVBoxOSC' ./gradle.properties
sed -i '$a\RELEASE_STORE_PASSWORD=TVBoxOSC' ./gradle.properties
sed -i '$a\RELEASE_KEY_PASSWORD=TVBoxOSC' ./gradle.properties
sed -i 's/^#\(org.gradle.jvmargs=.*\)/\1/' ./gradle.properties
- uses: actions/setup-java@v4
if: ${{ matrix.java_ver }}
with:
@ -145,18 +146,6 @@ jobs:
if: ${{ inputs.donotpublish && env.commit }}
run: |
echo "commit=" >> $GITHUB_ENV
- name: Release and Upload Assets
uses: ncipollo/release-action@v1
if: ${{ env.commit }}
with:
name: ${{ env.tag }}
tag: ${{ env.tag }}
bodyFile: TVBoxOSC/apk/${{ matrix.userName }}-Release.log
allowUpdates: true
removeArtifacts: true
artifacts: |
TVBoxOSC/apk/*.apk
TVBoxOSC/apk/sourceCode-${{ env.commitS }}.*
clean:
needs: build
runs-on: ubuntu-latest
@ -167,4 +156,4 @@ jobs:
token: ${{ github.token }}
repository: ${{ github.repository }}
retain_days: 14
keep_minimum_runs: 10
keep_minimum_runs: 10

@ -88,18 +88,38 @@ public class SourceViewModel extends ViewModel {
public static final ExecutorService spThreadPool = Executors.newSingleThreadExecutor();
//homeContent缓存,最多存储5个sourceKey的AbsSortXml对象
private static Map<String, AbsSortXml> sortCache = new LinkedHashMap<String, AbsSortXml>(5, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, AbsSortXml> eldest) {
return size() > 5;
}
};
// homeContent
public void getSort(String sourceKey) {
public void getSort(final String sourceKey) {
LOG.i("echo--getSort-start");
if (sourceKey == null) {
sortResult.postValue(null);
return;
}
// 优先检查缓存
AbsSortXml cached = sortCache.get(sourceKey);
if (cached != null) {
LOG.i("echo--getSort-cached--"+sourceKey);
sortResult.postValue(cached);
return;
}
SourceBean sourceBean = ApiConfig.get().getSource(sourceKey);
if(sourceBean.getName().length()<=3 && sourceBean.getName().endsWith("搜")){
sortResult.postValue(null);
return;
}
int type = sourceBean.getType();
final int type = sourceBean.getType();
if (type == 3) {
Runnable waitResponse = new Runnable() {
@Override
@ -123,23 +143,26 @@ public class SourceViewModel extends ViewModel {
e.printStackTrace();
} finally {
if (sortJson != null) {
AbsSortXml sortXml = sortJson(sortResult, sortJson);
final AbsSortXml sortXml = sortJson(sortResult, sortJson);
if (sortXml != null && Hawk.get(HawkConfig.HOME_REC, 0) == 1) {
AbsXml absXml = json(null, sortJson, sourceBean.getKey());
if (absXml != null && absXml.movie != null && absXml.movie.videoList != null && absXml.movie.videoList.size() > 0) {
sortXml.videoList = absXml.movie.videoList;
sortResult.postValue(sortXml);
sortCache.put(sourceKey, sortXml);
} else {
getHomeRecList(sourceBean, null, new HomeRecCallback() {
@Override
public void done(List<Movie.Video> videos) {
sortXml.videoList = videos;
sortResult.postValue(sortXml);
sortCache.put(sourceKey, sortXml);
}
});
}
} else {
sortResult.postValue(sortXml);
sortCache.put(sourceKey, sortXml);
}
} else {
sortResult.postValue(null);
@ -181,16 +204,18 @@ public class SourceViewModel extends ViewModel {
for (Movie.Video vod : sortXml.list.videoList) {
ids.add(vod.id);
}
AbsSortXml finalSortXml = sortXml;
final AbsSortXml finalSortXml = sortXml;
getHomeRecList(sourceBean, ids, new HomeRecCallback() {
@Override
public void done(List<Movie.Video> videos) {
finalSortXml.videoList = videos;
sortResult.postValue(finalSortXml);
sortCache.put(sourceKey, finalSortXml);
}
});
} else {
sortResult.postValue(sortXml);
sortCache.put(sourceKey, sortXml);
}
}
@ -222,23 +247,26 @@ public class SourceViewModel extends ViewModel {
public void onSuccess(Response<String> response) {
String sortJson = response.body();
if (sortJson != null) {
AbsSortXml sortXml = sortJson(sortResult, sortJson);
final AbsSortXml sortXml = sortJson(sortResult, sortJson);
if (sortXml != null && Hawk.get(HawkConfig.HOME_REC, 0) == 1) {
AbsXml absXml = json(null, sortJson, sourceBean.getKey());
if (absXml != null && absXml.movie != null && absXml.movie.videoList != null && absXml.movie.videoList.size() > 0) {
sortXml.videoList = absXml.movie.videoList;
sortResult.postValue(sortXml);
sortCache.put(sourceKey, sortXml);
} else {
getHomeRecList(sourceBean, null, new HomeRecCallback() {
@Override
public void done(List<Movie.Video> videos) {
sortXml.videoList = videos;
sortResult.postValue(sortXml);
sortCache.put(sourceKey, sortXml);
}
});
}
} else {
sortResult.postValue(sortXml);
sortCache.put(sourceKey, sortXml);
}
} else {
sortResult.postValue(null);
@ -265,16 +293,18 @@ public class SourceViewModel extends ViewModel {
@Override
public void onResponse(@NonNull Call call, @NonNull okhttp3.Response response) throws IOException {
assert response.body() != null;
String sortJson = response.body().string();
AbsSortXml sortXml = sortJson(sortResult, sortJson);
String sortJson = response.body().string();
final AbsSortXml sortXml = sortJson(sortResult, sortJson);
if (sortXml != null && Hawk.get(HawkConfig.HOME_REC, 0) == 1) {
AbsXml absXml = json(null, sortJson, sourceBean.getKey());
if (absXml != null && absXml.movie != null && absXml.movie.videoList != null && absXml.movie.videoList.size() > 0) {
sortXml.videoList = absXml.movie.videoList;
sortResult.postValue(sortXml);
sortCache.put(sourceKey, sortXml);
}
} else {
sortResult.postValue(sortXml);
sortCache.put(sourceKey, sortXml);
}
}
});
@ -288,6 +318,7 @@ public class SourceViewModel extends ViewModel {
}
// categoryContent
public void getList(MovieSort.SortData sortData, int page) {
LOG.i("getList:");
SourceBean homeSourceBean = ApiConfig.get().getHomeSourceBean();
int type = homeSourceBean.getType();
if (type == 3) {

@ -6,7 +6,6 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
#org.gradle.jvmargs=-Xmx2048m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
@ -18,4 +17,4 @@ android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
IsDebug=true
#org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED
org.gradle.jvmargs=-Xmx2048m --add-opens java.base/java.io=ALL-UNNAMED

Loading…
Cancel
Save