-
Notifications
You must be signed in to change notification settings - Fork 293
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Android inline ad performance #269
Comments
Not show inline ads to android < 10 is a disaster from a business perspective, we are talking of thousands of users. @jjliu15 does this same plugin support the fixed position banners you are talking about (just like the deprecated plugin did)? |
Fixed position banners are supported, but the implementation is different than before. Now you need to align the flutter widget that displays the banner ad to a fixed position. You can see the example app for a reference |
Sadly this doesnt do much for me. Using A stack with InteractiveViewer and a bottom aligned banner ad, my frame time is 1000ms on an IpadPro 12.9inch. |
We have added a flag to the Flutter master channel that helps improve the performance. It's not a perfect fix since the Ad may be a few frames behind the Flutter frame, but depending on the layout you use, it could be useful. Please try it out, and let us know if the performance is improved. To use this flag, set import 'package:flutter/services.dart';
void main() {
PlatformViewsService.synchronizeToNativeViewHierarchy(false);
runApp(MyApp());
} |
I am in master branch but didn't see this method. Doctor summary (to see all details, run flutter doctor -v): ! Doctor found issues in 1 category. |
@sleepingkit You may need to run |
Hi @blasten, I have performed some tests:
Stable branchMaster branch with
|
@svprdga that doesn’t seem right. It can’t possibly be more expensive, since there’s less work. We also enable thread merging, which is the other thing that reduces performance. Normally in a Flutter app, there is a raster thread and a platform/Android main UI thread. When we show an Android view, we are unable to continue with this thread configuration due to the dependencies and constraints. For example, you cannot add a view to an Android app from a different thread, doing so is prohibited. Would you be willing to share your app, and I can profile it further? |
@blasten Why is everyone ignoring this fork #80 (comment)? |
@blasten I can't share the app, but I have recreated the issue in this sample project. (*) Remember to set your app ID in AndroidManifest
Stable branchMaster branchI'd say that has improved a little bit, but far from being efficient. The UI I have created is extremely simple, with a more complex UI the performance is worse. |
@naamapps we aren't. We used that approach initially, but hit technical limitations - hybrid composition workarounds those limitations. Stay tuned for future improvements. |
@blasten It's great to hear that the development is active and you're trying to make the package better. |
@blasten I am right now using the fork in many apps, around 10k users combined, without any issue. I can't say the same regarding the official package (I had to quickly replace it once I realized how bad the performance was). |
I think the reason is because |
Thanks for the clarification @bdlukaa . If this is the case, then we have to decide between:
Perfect. |
Only to add to the discussion, Those days I Was also thinking how to provide a better experience for the user and then those ideas came: 1.- Inject the JS code inside a Webview. This worked, but had the same "problem" as the current implementation because inappwebview uses Android View as well - https://inappwebview.dev/docs/in-app-webview/basic-usage/ 2 - Make a Dart solution fetching the ad from Admanager and firing all the needed callbacks (This sound the best solution but comes with caveats that we can't bear like no Viewability Tracking, no Open Bidding, no AdX etc) - https://support.google.com/admanager/answer/2623168?hl=en If anyone thinks on a better solutions we can try to implement so we can check performance-wise if it would be ok :) |
@atrope a 100% dart solution is what we need I think. |
@atrope recently I've been thinking of creating a startup called "Flutter Ads" or something like that, that provides ads and has a full-dart implementation, but I lost interest on it. I'll leave this idea here in case of someone wants to work on it. |
Hey guys I made here something so we can check performance for the loaded banners using somewhat native requests.. DO NOT USE THIS TO REQUEST ADS in your Test/Prod App, it has none of the requirements for it. Be sure to have House Simple ads so it can fetch something as it does not work for dynamic allocation nor adx. it uses flutter_html to parse the html returned by dfp and dio for request.
Call the banner anywhere with
Send here the performance results :) |
Wow, that sums it up so well. Ads are extremely important for devs. Please Flutter Team, put some focus on this! This is quite a bottleneck for flutter applications. Many many people would really appreciate it. We can not realistically write this ad library ourselves. |
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as off-topic.
Hey everyone, I've been working on improvement perf of Android native views. Please try the latest changes, and share any findings: Steps
flutter channel master
flutter upgrade
google_mobile_ads:
path: <path>/googleads-mobile-flutter/packages/google_mobile_ads
|
Hi @blasten, By the way, at first glance I can say that the performance has noticeably improved. I'll be doing other production-level tests, but these improvements seem to live up to expectations. Also, there is a scrolling issue with the WebView when banner and WebView are in the same screen. WebView's scrolling is not working. (WebView has custom GestureDetector) If you want to hear more, I can share details. Example code for the impression issueclass MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView.builder(
itemCount: 15,
itemBuilder: (context, index) {
if (index != 0 && index % 5 == 0) {
return const _BannerAd();
}
return Container(
height: 200,
color: Color((Random().nextDouble() * 0xFFFFFF).toInt())
.withOpacity(1),
);
},
),
);
}
}
class _BannerAd extends StatefulWidget {
const _BannerAd({Key? key}) : super(key: key);
@override
_BannerAdState createState() => _BannerAdState();
}
class _BannerAdState extends State<_BannerAd>
with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;
late BannerAd myBanner;
@override
void initState() {
super.initState();
myBanner = BannerAd(
adUnitId: BannerAd.testAdUnitId,
size: AdSize.banner,
request: const AdRequest(),
listener: BannerAdListener(
onAdLoaded: (ad) => print('Ad loaded.'),
onAdFailedToLoad: (ad, error) {
ad.dispose();
print('Ad failed to load .');
},
onAdOpened: (ad) => print('Ad opened.'),
onAdClosed: (ad) => print('Ad closed.'),
onAdImpression: (ad) => print('Ad impression.'),
),
)..load();
}
@override
void dispose() {
myBanner.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
super.build(context);
return Container(
width: myBanner.size.width.toDouble(),
height: myBanner.size.height.toDouble(),
margin: const EdgeInsets.all(20),
alignment: Alignment.center,
child: AdWidget(ad: myBanner),
);
}
} |
Hi @blasten, thank you very much for your renewed efforts to improve the performance - as stated before, performance has already been improved noticeably. Unfortunately some native ads are not showing up on older Android versions anymore even if they are loaded according to the callback. I am not sure if @ilkanimal is talking about the same problem. |
@cmasdf yes. We are aware of some issues. flutter/flutter#98722 |
That's good feedback. The current implementation triggers the create event when the ad is in the viewport. |
Fatal Exception: java.lang.LinkageError
|
@jjliu15 does the issue above look familiar? |
This issue was fixed by flutter/flutter#100091. Other than #532, no more changes are required in the googleads plugin. |
Switching to flutter beta channel largely improved performances in my case. |
Similar performance issues occur in ios, are there any ongoing issues related to this? |
I see this issue is closed. Any estimate on when it will hit flutter stable? |
@juliancoronado A new stable release occurs every quarter, a fix on master channel would roughly take 5-6 months to land on stable channel Please see https://github.com/flutter/flutter/wiki/Flutter-build-release-channels |
@nero-angela, Please consider filing that as a separate issue. |
* 기기에서 재생중인 음악의 정보 및 가사를 보여주는 기능 (#10) (#11) * Import nowplaying plugin * Change nowplaying service label to PLyric in AndroidManifest.xml * Implement playing_music_provider.dart * Implement CardView in HomePage * Feature/crawling (#12) * Add proxy URL for bypass CORS (#4) Co-authored-by: Cirrus CI <[email protected]> * Revert "Add proxy URL for bypass CORS (#4)" This reverts commit d78b5d1 * Add internet permission in AndroidManifest.xml * 크롤링 기능 향상 (#9) * Add proxy URL for bypass CORS * Add Some useless file to gitignore * 멜론 크롤링 기능 로직 향상, 폴더 이름 수정, 기존 searchLyric 함수 세분화 * Rollback .gitignore file * Rollback pubspec.lock file * Delete unuse import(meterial) * Edit comment, Add TODO * Enhance comments refer to https://dart.dev/guides/language/effective-dart/documentation * Exclude further explanation about some variables * Fix comments * Remove duplicate comment Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: Minseong Kim <[email protected]> Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: Minseong Kim <[email protected]> * Fix invalid importing (#21) * Update widget test (#22) * Remove widget test * Add appBar title widget test * Add git action (#24) * Add git action * Fix code formatting * Fix file * Remove test content * Add scroll button in home page (#13) Co-authored-by: Sihyun Jung <[email protected]> * Update scroll button in home page (#25) * Update scroll button in home page * Change if branch to ternary operator * Change parameters (#26) * Add proxy URL for bypass CORS * Add proxy URL for bypass CORS (#4) Co-authored-by: Cirrus CI <[email protected]> * Revert "Add proxy URL for bypass CORS (#4)" This reverts commit d78b5d1 * Add internet permission in AndroidManifest.xml * Add Some useless file to gitignore * 멜론 크롤링 기능 로직 향상, 폴더 이름 수정, 기존 searchLyric 함수 세분화 * Rollback .gitignore file * Rollback pubspec.lock file * Delete unuse import(meterial) * Edit comment, Add TODO * Enhance comments refer to https://dart.dev/guides/language/effective-dart/documentation * Exclude further explanation about some variables * Fix comments * Remove duplicate comment * Delete test code temporarily * Fix parameters, from now on it takes Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: Minseong Kim <[email protected]> * Change text height and add padding to bottom in scrollview (#28) * Update nowplaying plugin version to fix #27 (#29) * PlayingMusicProvider 업데이트 (#30) * Fix not working error in other players * Change debouncer to waiter * Add exported at NowPlaying service in AndroidManifest.xml * Fix typo * 홈 화면에 음악 컨트롤 기능 추가 (#32) * Change minSdkVersion to 16 in build.gradle * Implement MediaController.kt * Implement music controller in Flutter part * Code formatting * Return false at null exception in MediaController.kt * Simplify constructor in MediaController.kt * Add try-catch and change to playOrPause * Add caption in TODO items * Change reverse curve to easeIn * Add album cover image animation * Change property to getBuilder * Add animated switcher for album cover transition * Improve code structure for performance * Update gradle, kotlin and targetSdk version (#34) * 멜론 검색 최적화를 위한 전처리 기능 추가 (#36) * 멜론 검색 최적화를 위한 전처리 기능 추가 * 리뷰를 통해 받은 개선점 적용 Co-authored-by: Cirrus CI <[email protected]> * Remove duplicate (#37) * 미디어 초기 상태 버그 해결 및 안정성 향상 (#38) * Remove duplicate * Remove useless generic code in MediaController.kt * Fix to fetch music data when starting * Update media controller to improve stability * Bump nowplaying plugin version * Change to show snack bar when failed control * 테스트 코드 추가 & 전처리해주는 클래스 메소드에서 return 값에 trim() 추가 (#39) * 테스트 코드 추가 & 전처리해주는 클래스 메소드에서 return 값에 trim() 추가 * Delete some unused variable & import Co-authored-by: Cirrus CI <[email protected]> * Change to show snack bar when failed control (#41) * Update snackBar that shows when controller has error (#43) * 권한 요구 Bottom Sheet 구현 (#42) * Update permission requiring scenario * Add lifecycle observer in permission bottom sheet * Update text height in themes.dart * Remove duplicated text height * Remove already defined text height * TEST CASE 추가 & 곡에 포함되있는 특수 문자도 같이 처리 (#44) Co-authored-by: Cirrus CI <[email protected]> * Remove useless test (#46) * 홈 페이지 컨트롤러 및 가사 갱신 상태 수정 (#45) * 음악을 재생 혹은 중지시 컨트롤러 위치가 0으로 변경되는 문제 해결 * 다음 혹은 이전곡 재생시 컨트롤 버튼 상태 문제 수정 * Fix typo * Add areLyricsUpdating value and change track to non-null value * 가사를 얻고있는 중 인지 계산하는 로직 업데이트 * Rename to trackState * Change type from List to Set * 테마 변경시 일부 적용이 안되던 버그 해결 (#47) * 온라인 폰트에서 폰트 에셋 파일로 변경 (#48) * Add font files * Fix font importing and update fonts * Change font height * Create default_snack_bar.dart * Subtitle 구현 (#49) * Main Change : 벅스로 플랫폼 변경 (#50) * TEST CASE 추가 & 곡에 포함되있는 특수 문자도 같이 처리 * 영어 한국어 혼용문 처리 로직 변경 & 테스트 케이스 추가 * Change Melon to Bugs platform * - 문자도 처리하게 변경 * Fix Typo * 검색 과정 중 오류 핸들링 & 예외 처리 적용 * Delete main function in scraper file & Add documentation * Fix function typo Co-authored-by: Cirrus CI <[email protected]> * 중복된 테스트 삭제 (#51) * 가사 스크롤 뷰의 bottom 패딩 수정 (#53) * 특수 문자 로직 변경 (#55) Co-authored-by: Cirrus CI <[email protected]> * Conflict resolve by making basic test file (#61) * Remove widget test (#18) * Create main.yml (#19) * Create main.yml * Add appBar widget test * Write basic test Co-authored-by: Minseong Kim <[email protected]> Co-authored-by: Cirrus CI <[email protected]> * Rebase from main branch (#62) * Remove widget test (#18) * Create main.yml (#19) * Create main.yml * Add appBar widget test * 기기에서 재생중인 음악의 정보 및 가사를 보여주는 기능 (#10) (#11) * Import nowplaying plugin * Change nowplaying service label to PLyric in AndroidManifest.xml * Implement playing_music_provider.dart * Implement CardView in HomePage * Feature/crawling (#12) * Add proxy URL for bypass CORS (#4) Co-authored-by: Cirrus CI <[email protected]> * Revert "Add proxy URL for bypass CORS (#4)" This reverts commit d78b5d1 * Add internet permission in AndroidManifest.xml * 크롤링 기능 향상 (#9) * Add proxy URL for bypass CORS * Add Some useless file to gitignore * 멜론 크롤링 기능 로직 향상, 폴더 이름 수정, 기존 searchLyric 함수 세분화 * Rollback .gitignore file * Rollback pubspec.lock file * Delete unuse import(meterial) * Edit comment, Add TODO * Enhance comments refer to https://dart.dev/guides/language/effective-dart/documentation * Exclude further explanation about some variables * Fix comments * Remove duplicate comment Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: Minseong Kim <[email protected]> Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: Minseong Kim <[email protected]> * Fix invalid importing (#21) * Add git action (#24) * Add git action * Fix code formatting * Fix file * Remove test content * Add scroll button in home page (#13) Co-authored-by: Sihyun Jung <[email protected]> * Update scroll button in home page (#25) * Update scroll button in home page * Change if branch to ternary operator * Change parameters (#26) * Add proxy URL for bypass CORS * Add proxy URL for bypass CORS (#4) Co-authored-by: Cirrus CI <[email protected]> * Revert "Add proxy URL for bypass CORS (#4)" This reverts commit d78b5d1 * Add internet permission in AndroidManifest.xml * Add Some useless file to gitignore * 멜론 크롤링 기능 로직 향상, 폴더 이름 수정, 기존 searchLyric 함수 세분화 * Rollback .gitignore file * Rollback pubspec.lock file * Delete unuse import(meterial) * Edit comment, Add TODO * Enhance comments refer to https://dart.dev/guides/language/effective-dart/documentation * Exclude further explanation about some variables * Fix comments * Remove duplicate comment * Delete test code temporarily * Fix parameters, from now on it takes Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: Minseong Kim <[email protected]> * Change text height and add padding to bottom in scrollview (#28) * Update nowplaying plugin version to fix #27 (#29) * PlayingMusicProvider 업데이트 (#30) * Fix not working error in other players * Change debouncer to waiter * Add exported at NowPlaying service in AndroidManifest.xml * Fix typo * 홈 화면에 음악 컨트롤 기능 추가 (#32) * Change minSdkVersion to 16 in build.gradle * Implement MediaController.kt * Implement music controller in Flutter part * Code formatting * Return false at null exception in MediaController.kt * Simplify constructor in MediaController.kt * Add try-catch and change to playOrPause * Add caption in TODO items * Change reverse curve to easeIn * Add album cover image animation * Change property to getBuilder * Add animated switcher for album cover transition * Improve code structure for performance * Update gradle, kotlin and targetSdk version (#34) * 멜론 검색 최적화를 위한 전처리 기능 추가 (#36) * 멜론 검색 최적화를 위한 전처리 기능 추가 * 리뷰를 통해 받은 개선점 적용 Co-authored-by: Cirrus CI <[email protected]> * Remove duplicate (#37) * 미디어 초기 상태 버그 해결 및 안정성 향상 (#38) * Remove duplicate * Remove useless generic code in MediaController.kt * Fix to fetch music data when starting * Update media controller to improve stability * Bump nowplaying plugin version * Change to show snack bar when failed control * 테스트 코드 추가 & 전처리해주는 클래스 메소드에서 return 값에 trim() 추가 (#39) * 테스트 코드 추가 & 전처리해주는 클래스 메소드에서 return 값에 trim() 추가 * Delete some unused variable & import Co-authored-by: Cirrus CI <[email protected]> * Change to show snack bar when failed control (#41) * Update snackBar that shows when controller has error (#43) * 권한 요구 Bottom Sheet 구현 (#42) * Update permission requiring scenario * Add lifecycle observer in permission bottom sheet * Update text height in themes.dart * Remove duplicated text height * Remove already defined text height * TEST CASE 추가 & 곡에 포함되있는 특수 문자도 같이 처리 (#44) Co-authored-by: Cirrus CI <[email protected]> * Remove useless test (#46) * 홈 페이지 컨트롤러 및 가사 갱신 상태 수정 (#45) * 음악을 재생 혹은 중지시 컨트롤러 위치가 0으로 변경되는 문제 해결 * 다음 혹은 이전곡 재생시 컨트롤 버튼 상태 문제 수정 * Fix typo * Add areLyricsUpdating value and change track to non-null value * 가사를 얻고있는 중 인지 계산하는 로직 업데이트 * Rename to trackState * Change type from List to Set * 테마 변경시 일부 적용이 안되던 버그 해결 (#47) * 온라인 폰트에서 폰트 에셋 파일로 변경 (#48) * Add font files * Fix font importing and update fonts * Change font height * Create default_snack_bar.dart * Subtitle 구현 (#49) * Main Change : 벅스로 플랫폼 변경 (#50) * TEST CASE 추가 & 곡에 포함되있는 특수 문자도 같이 처리 * 영어 한국어 혼용문 처리 로직 변경 & 테스트 케이스 추가 * Change Melon to Bugs platform * - 문자도 처리하게 변경 * Fix Typo * 검색 과정 중 오류 핸들링 & 예외 처리 적용 * Delete main function in scraper file & Add documentation * Fix function typo Co-authored-by: Cirrus CI <[email protected]> * 중복된 테스트 삭제 (#51) * 가사 스크롤 뷰의 bottom 패딩 수정 (#53) * 특수 문자 로직 변경 (#55) Co-authored-by: Cirrus CI <[email protected]> * Conflict resolve by making basic test file (#61) * Remove widget test (#18) * Create main.yml (#19) * Create main.yml * Add appBar widget test * Write basic test Co-authored-by: Minseong Kim <[email protected]> Co-authored-by: Cirrus CI <[email protected]> * 임시 테스트 삭제 Co-authored-by: Sihyun Jung <[email protected]> Co-authored-by: Cirrus CI <[email protected]> * 플로팅 오버레이 윈도우 구현 (#66) * 오버레이를 위한 권한 추가 및 기반 작업 (#56) * SystemAlertWindow 권한 및 초기 세팅 * SystemAlertWindow 권한 및 초기 세팅 * SystemAlertWindow 권한 및 초기 세팅 * 권한 허용 후 BottomSheet가 내려가지 않는 문제 수정 * 코드 간결화 * 플로팅 창 전환 아이콘 홈 페이지에 추가 * SystemAlertWindow 플러그인 삭제 * SystemAlertWindow 플러그인 삭제 * Gradle 버전 4.2.2로 다운그레이드 아래에서 관련 이슈 내용 확인 가능 flutter/flutter#87649 * 플로팅 뷰 프로토타입 구현 * Fix permission in AndroidManifest.xml * Update nowplaying plugin * 사용자가 명시적으로 권한을 허용 or 건너뛰기를 한 경우만 저장 * HomePage의 축소 버튼 기능 구현 * 포어그라운드 작동 업데이트 * 홈 페이지 축소 버튼 버그 해결 및 플로팅 뷰 안정성 향상 * 플로팅 윈도우 백그라운드 작동 및 앨범 커버 적용 등 업데이트 (#65) * SystemAlertWindow 권한 및 초기 세팅 * SystemAlertWindow 권한 및 초기 세팅 * SystemAlertWindow 권한 및 초기 세팅 * 권한 허용 후 BottomSheet가 내려가지 않는 문제 수정 * 코드 간결화 * 플로팅 창 전환 아이콘 홈 페이지에 추가 * SystemAlertWindow 플러그인 삭제 * SystemAlertWindow 플러그인 삭제 * Gradle 버전 4.2.2로 다운그레이드 아래에서 관련 이슈 내용 확인 가능 flutter/flutter#87649 * 플로팅 뷰 프로토타입 구현 * Fix permission in AndroidManifest.xml * Update nowplaying plugin * 사용자가 명시적으로 권한을 허용 or 건너뛰기를 한 경우만 저장 * HomePage의 축소 버튼 기능 구현 * 포어그라운드 작동 업데이트 * 홈 페이지 축소 버튼 버그 해결 및 플로팅 뷰 안정성 향상 * Update to show album cover and tap gesture handling - jja08111/nowplaying@a115a93 * 백그라운드에서 작동하도록 수정 - 사용자가 명시적으로 홈 페이지의 축소 버튼을 눌러야만 플로팅 윈도우 서비스 실행 - 앱을 종료해도 음악 업데이트 시 플로팅 뷰를 위한 가사 검색이 작동할 수 있도록 수정 * 플러그인 연결 에러 수정 및 Merge로 인한 잘못된 코드 수정 - jja08111/nowplaying@cace5f5 * 명시적으로 플로팅 뷰를 시작할때만 뷰를 띄우도록 수정 - jja08111/nowplaying@b4666de * 다크모드 구현 및 초기 진입 에러 예외처리 구현 - jja08111/nowplaying@2cec21a * Flutter, Dart SDK 버전 업그레이드 및 패키지 버전 업데이트 (#67) * 설정 페이지에서 권한 설정 타일 구현 (#68) * PermissionProvider 리팩토링 * 설정 페이지에서 권한 설정 타일 구현 * 권한 요구 BottomSheet 드래그 비허용 및 버전 오류 수정 (#70) * 드래그하여 권한 요구 BottomSheet 해제하지 못하도록 변경 * permission_handler 플러그인의 버전 업데이트가 반영되지 않은 부분 수정 * 디자인 개선 (#71) * 잘못된 배경 색상톤 수정 * 카드뷰 배경 투명도 84%로 수정 * 앱 타이틀 텍스트 두께 하향 * 아이콘 투명도 54%로 감소 * 아이콘 테두리 둥근 것으로 수정 - play_pause의 `AnimatedIcon`은 둥근 것이 없어서 애니메이션 삭제 * Subtitle 왼쪽 막대 수정 * Card 위젯의 그림자 수정 * 다크모드일때 잘못된 카드뷰 배경 색상 수정 * Add const keyword * Upgrade flutter, dart version and fix NameNotFoundException warning (#73) * Bump flutter and dart version * Fix NameNotFoundException by adding permission in AndroidManifest.xml * 특수문자 query 생성 시 처리하기 (#72) * 검색 쿼리를 Uri encode 하는 형식으로 변경 * Handle special characters for search query * Add necessary files for #72 * Apply suggestions from #72 * Apply suggestions from #72 - Move Exception class in bugs_lyrics_scraper.dart * Apply suggestion from #72 - Move exception classes in bugs_lyrics_scraper.dart * solve getLyricsFromBugs data type problem * Delete fromGenius & Delete Exception class & Change variable name Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: jungsiroo <[email protected]> * 배너 광고 추가 (#74) * Bump flutter and dart version * Fix NameNotFoundException by adding permission in AndroidManifest.xml * Add banner ad id in AndroidManifest.xml * 배너 광고 구현 * 광고가 없을 때 공백을 두지 않도록 수정 * 광고가 없을 때 광고가 띄워지지 않는 것을 테스트 * 잘못된 광고 ID 제거 in AndroidManifest.xml * 광고 ID 및 광고 단위 ID 변경 * 앱 이름 및 아이콘 변경 (#77) * 앱이름 PLyric 으로 수정 * 앱 아이콘 변경 * 안드로이드 초기출시 준비 (#78) * 검색 쿼리를 Uri encode 하는 형식으로 변경 * Handle special characters for search query * Add necessary files for #72 * Apply suggestions from #72 * Apply suggestions from #72 - Move Exception class in bugs_lyrics_scraper.dart * Apply suggestion from #72 - Move exception classes in bugs_lyrics_scraper.dart * solve getLyricsFromBugs data type problem * Delete fromGenius & Delete Exception class & Change variable name * 안드로이드 출시를 위한 난독화, 암호화와 앱 서명 * README 파일 업데이트 * 패키지 이름 변경 Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: jungsiroo <[email protected]> * Gitignore에 `key.jks` 추가 및 누락된 패키지 이름 변경 수정 (#79) * Update gitignore * Update .gitignore * Revert "Update gitignore" This reverts commit 9c7ef5a. * 누락된 패키지 이름 수정 반영 * 광고 성능 향상을 위한 임시 해결 및 버전 1.0.0+2로 수정 (#80) * 광고로 인한 성능저하 임시 해결 googleads/googleads-mobile-flutter#269 에 있는 fork 를 이용하여 임시 해결 * 설정 화면에서 배너 광고 제거 * TODO 추가 * Bump version to 1.0.0+2 * Fix typo in README.md * 노래 데이터 전처리 클래스 적용 및 단순화 (#81) * 검색 쿼리를 Uri encode 하는 형식으로 변경 * Handle special characters for search query * Add necessary files for #72 * Apply suggestions from #72 * Apply suggestions from #72 - Move Exception class in bugs_lyrics_scraper.dart * Apply suggestion from #72 - Move exception classes in bugs_lyrics_scraper.dart * solve getLyricsFromBugs data type problem * Delete fromGenius & Delete Exception class & Change variable name * 안드로이드 출시를 위한 난독화, 암호화와 앱 서명 * README 파일 업데이트 * 패키지 이름 변경 * Apply Song data preprocessor method to music provider * Revert "Apply Song data preprocessor method to music provider" This reverts commit 6a3e924. * 전처리 과정 `getLyricsFromBugs()` 함수에 추가 * extension을 이용하여 SongDataFilter로 수정 Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: jungsiroo <[email protected]> Co-authored-by: Minseong Kim <[email protected]> * Bump version to 1.0.0+3 (#83) * 광고 ID 수정 및 공개 테스트 출시(1.0.0+4) (#85) * 광고 코드 수정 * Bump version to 1.0.0+4 * Conflict 해결 (#87) * Remove widget test (#18) * Create main.yml (#19) * Create main.yml * Add appBar widget test * 초기 구현 (#64) * 기기에서 재생중인 음악의 정보 및 가사를 보여주는 기능 (#10) (#11) * Import nowplaying plugin * Change nowplaying service label to PLyric in AndroidManifest.xml * Implement playing_music_provider.dart * Implement CardView in HomePage * Feature/crawling (#12) * Add proxy URL for bypass CORS (#4) Co-authored-by: Cirrus CI <[email protected]> * Revert "Add proxy URL for bypass CORS (#4)" This reverts commit d78b5d1 * Add internet permission in AndroidManifest.xml * 크롤링 기능 향상 (#9) * Add proxy URL for bypass CORS * Add Some useless file to gitignore * 멜론 크롤링 기능 로직 향상, 폴더 이름 수정, 기존 searchLyric 함수 세분화 * Rollback .gitignore file * Rollback pubspec.lock file * Delete unuse import(meterial) * Edit comment, Add TODO * Enhance comments refer to https://dart.dev/guides/language/effective-dart/documentation * Exclude further explanation about some variables * Fix comments * Remove duplicate comment Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: Minseong Kim <[email protected]> Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: Minseong Kim <[email protected]> * Fix invalid importing (#21) * Add git action (#24) * Add git action * Fix code formatting * Fix file * Remove test content * Add scroll button in home page (#13) Co-authored-by: Sihyun Jung <[email protected]> * Update scroll button in home page (#25) * Update scroll button in home page * Change if branch to ternary operator * Change parameters (#26) * Add proxy URL for bypass CORS * Add proxy URL for bypass CORS (#4) Co-authored-by: Cirrus CI <[email protected]> * Revert "Add proxy URL for bypass CORS (#4)" This reverts commit d78b5d1 * Add internet permission in AndroidManifest.xml * Add Some useless file to gitignore * 멜론 크롤링 기능 로직 향상, 폴더 이름 수정, 기존 searchLyric 함수 세분화 * Rollback .gitignore file * Rollback pubspec.lock file * Delete unuse import(meterial) * Edit comment, Add TODO * Enhance comments refer to https://dart.dev/guides/language/effective-dart/documentation * Exclude further explanation about some variables * Fix comments * Remove duplicate comment * Delete test code temporarily * Fix parameters, from now on it takes Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: Minseong Kim <[email protected]> * Change text height and add padding to bottom in scrollview (#28) * Update nowplaying plugin version to fix #27 (#29) * PlayingMusicProvider 업데이트 (#30) * Fix not working error in other players * Change debouncer to waiter * Add exported at NowPlaying service in AndroidManifest.xml * Fix typo * 홈 화면에 음악 컨트롤 기능 추가 (#32) * Change minSdkVersion to 16 in build.gradle * Implement MediaController.kt * Implement music controller in Flutter part * Code formatting * Return false at null exception in MediaController.kt * Simplify constructor in MediaController.kt * Add try-catch and change to playOrPause * Add caption in TODO items * Change reverse curve to easeIn * Add album cover image animation * Change property to getBuilder * Add animated switcher for album cover transition * Improve code structure for performance * Update gradle, kotlin and targetSdk version (#34) * 멜론 검색 최적화를 위한 전처리 기능 추가 (#36) * 멜론 검색 최적화를 위한 전처리 기능 추가 * 리뷰를 통해 받은 개선점 적용 Co-authored-by: Cirrus CI <[email protected]> * Remove duplicate (#37) * 미디어 초기 상태 버그 해결 및 안정성 향상 (#38) * Remove duplicate * Remove useless generic code in MediaController.kt * Fix to fetch music data when starting * Update media controller to improve stability * Bump nowplaying plugin version * Change to show snack bar when failed control * 테스트 코드 추가 & 전처리해주는 클래스 메소드에서 return 값에 trim() 추가 (#39) * 테스트 코드 추가 & 전처리해주는 클래스 메소드에서 return 값에 trim() 추가 * Delete some unused variable & import Co-authored-by: Cirrus CI <[email protected]> * Change to show snack bar when failed control (#41) * Update snackBar that shows when controller has error (#43) * 권한 요구 Bottom Sheet 구현 (#42) * Update permission requiring scenario * Add lifecycle observer in permission bottom sheet * Update text height in themes.dart * Remove duplicated text height * Remove already defined text height * TEST CASE 추가 & 곡에 포함되있는 특수 문자도 같이 처리 (#44) Co-authored-by: Cirrus CI <[email protected]> * Remove useless test (#46) * 홈 페이지 컨트롤러 및 가사 갱신 상태 수정 (#45) * 음악을 재생 혹은 중지시 컨트롤러 위치가 0으로 변경되는 문제 해결 * 다음 혹은 이전곡 재생시 컨트롤 버튼 상태 문제 수정 * Fix typo * Add areLyricsUpdating value and change track to non-null value * 가사를 얻고있는 중 인지 계산하는 로직 업데이트 * Rename to trackState * Change type from List to Set * 테마 변경시 일부 적용이 안되던 버그 해결 (#47) * 온라인 폰트에서 폰트 에셋 파일로 변경 (#48) * Add font files * Fix font importing and update fonts * Change font height * Create default_snack_bar.dart * Subtitle 구현 (#49) * Main Change : 벅스로 플랫폼 변경 (#50) * TEST CASE 추가 & 곡에 포함되있는 특수 문자도 같이 처리 * 영어 한국어 혼용문 처리 로직 변경 & 테스트 케이스 추가 * Change Melon to Bugs platform * - 문자도 처리하게 변경 * Fix Typo * 검색 과정 중 오류 핸들링 & 예외 처리 적용 * Delete main function in scraper file & Add documentation * Fix function typo Co-authored-by: Cirrus CI <[email protected]> * 중복된 테스트 삭제 (#51) * 가사 스크롤 뷰의 bottom 패딩 수정 (#53) * 특수 문자 로직 변경 (#55) Co-authored-by: Cirrus CI <[email protected]> * Conflict resolve by making basic test file (#61) * Remove widget test (#18) * Create main.yml (#19) * Create main.yml * Add appBar widget test * Write basic test Co-authored-by: Minseong Kim <[email protected]> Co-authored-by: Cirrus CI <[email protected]> * 임시 테스트 삭제 Co-authored-by: Sihyun Jung <[email protected]> Co-authored-by: Cirrus CI <[email protected]> * Delete song_data_preprocessor.dart Co-authored-by: Sihyun Jung <[email protected]> Co-authored-by: Cirrus CI <[email protected]> * `QUERY_ALL_PACKAGES` 권한 제거 및 쿼리 추가 in `AndroidManifest.xml` (#93) * 앱 권한 수정 * 앱 버전 수정 * SDK 업데이트 * Deprecated된 색상 theme 수정 Co-authored-by: Sihyun Jung <[email protected]> Co-authored-by: Cirrus CI <[email protected]> Co-authored-by: jungsiroo <[email protected]>
With Flutter 3.0 the performance on iOS is so bad... |
I have the same issue Out of nowhere, when I open my app, the ad(banner) starts dropping FPS(from 59-60 to 28-29). The performance improves, when I remove the Banner from the Widget tree (the Banner is pinned to a bottomSheet) I'm using Flutter verion Edit: I'm using now:
and it looks like the performance issue is gone |
@ramonpaolo Try upgrading to Flutter 3 |
The obvious solution to this appears to be implementing a native flutter (widget) ad container rather than relying on Platform Views. Flutter platform views evidently aren’t performant enough at present to support native ads (flutter/flutter#107486 (comment)), particularly in a ListView which is one of the documented usages of displaying Native Advanced ads. |
There have been a number of complaints about performance of inline banner and native ads on Android:
As mentioned in #80 (comment), performance is noticeably worse on Android 9 and below. This is related to use of hybrid composition, which is a requirement due to technical constraints.
Currentworkarounds are to constrict inline ads to android 10 and above, or only to only use fixed position banner/native ads.
The text was updated successfully, but these errors were encountered: