Code Monkey home page Code Monkey logo

mobfox-android-sdk's People

Contributors

asafgaber avatar brachil avatar epicapex avatar nabriski avatar ofirka avatar parkerk avatar rachelifoox avatar shoval1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mobfox-android-sdk's Issues

BUG: onInterstitialClosed() called up to 7x when closing an interstitial

Boy has this bug caused me a lot of wasted time. For some reason, onInterstitialClosed gets called multiple times when dismissing an interstitial ad (when touching the X icon)

This was calling my listener logic multiple times thus screwing everything up.

Currently trying to solve either with concurrency tools, or somehow adding more logic to ignore these calls.

screen shot 2016-08-16 at 8 39 01 pm

CC: @aldenml

Admob mediation with MobFox not Working.

Our app uses Admob and MobFox as mediation. It's working fine with following libs.
Compile files('libs/AdSdk_6.0.8.jar')
Compile files('libs/mobfoxmediationadapter.jar')

Then we try new sdk and replace old verion sdk with
Compile files('libs/MobFox-Android-SDK-Core-2.1.1.jar')
Compile files('libs/MobFox-Android-AdMob-Adapter.jar')

We didn't set any activity related to MobFox in the Manifest.

There error messages:
07-28 15:27:36.357 15089-15428/com.expensemanager I/Ads: Timed out waiting for adapter.
07-28 15:27:36.364 15089-15428/com.expensemanager I/Ads: No fill from any mediation ad networks.
07-28 15:27:36.376 15089-15089/com.expensemanager I/Ads: Scheduling ad refresh 60000 milliseconds from now.
07-28 15:27:36.377 15089-15089/com.expensemanager W/Ads: Failed to load ad: 3
07-28 15:27:36.631 15089-15434/com.expensemanager I/Ads: Timed out waiting for adapter.
07-28 15:27:36.632 15089-15434/com.expensemanager I/Ads: No fill from any mediation ad networks.
07-28 15:27:36.632 15089-15089/com.expensemanager I/Ads: Scheduling ad refresh 60000 milliseconds from now.
07-28 15:27:36.632 15089-15089/com.expensemanager W/Ads: Failed to load ad: 3

Please advise.
Thanks

No InterstitialAdListener::onBackPressed() event handler available.

None of these methods get invoked when the Android back button is pressed while displaying an interstitial ad.

public interface InterstitialAdListener {
    void onInterstitialLoaded(InterstitialAd var1);

    void onInterstitialFailed(InterstitialAd var1, Exception var2);

    void onInterstitialClosed(InterstitialAd var1);

    void onInterstitialFinished();

    void onInterstitialClicked(InterstitialAd var1);

    void onInterstitialShown(InterstitialAd var1);
}

Should I extend InterstitialAd and add my callback?

Luckily I see that InterstitialAd isn't final so I believe I can invoke a new method on my InterstitialAdListener implementation, but perhaps there's already another way to catch this event.

Q: Is there a way to suppress asking for the user's location when loading an ad?

I'm loading an interstitial on the UI thread, but despite me not adding
ACCESS_FINE_LOCATION on the manifest, MobFox still asks for it, is there a way to skip this, or is this mandatory?

We have several reasons not to ask our users for fine location:

  • Privacy
  • Our app has nothing to do with the user's location
  • We want to be energy efficient and not have to use the GPS, everytime our app starts to drain more battery we see our installation numbers drop.

Verify Native Ad Docs

We had a report that the trackers code form the docs did not work for a user.

for (int i = 0; i < trackers.size(); i++) {
    Tracker tracker = trackers.get(i);
    String trackerUrl = tracker.getUrl();
    AsyncTask<String, Void, Void> fireTracker = new AsyncTask<String, Void, Void>() {

        @Override
        protected Void doInBackground(String... params) {
            URL url;
            HttpURLConnection con = null;
            try {
                url = new URL(params[0]);
                con = (HttpURLConnection) url.openConnection();
                int responseCode = con.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    //tracker url fired!
                } else if (responseCode == HttpURLConnection.HTTP_BAD_GATEWAY) {
                    //tracker url bad gateway
                }
            } catch (Exception e) {
                //check exception for error origin
            } finally {
                if (con != null) {
                    con.disconnect();
                }
            }
            return null;
        }
    };
    if (trackerUrl != null) {
        fireTracker.execute(trackerUrl);
    } else {
        continue;
    }
}

MoPub Banner Adapter Error

[2/9/16, 8:28:53 AM] Yu Chen!!: Iā€™m getting this error while trying to add in the mopub adapter:
[2/9/16, 8:28:54 AM] Yu Chen!!: Warning: com.mobfox.sdk.adapters.MoPubBannerAdapter: can't find referenced method 'void setLongitude(double)' in program class com.mobfox.sdk.Banner
Warning: com.mobfox.sdk.adapters.MoPubBannerAdapter: can't find referenced method 'void setLatitude(double)' in program class com.mobfox.sdk.Banner
Warning: com.mobfox.sdk.adapters.MoPubInterstitialAdapter: can't find referenced method 'void setLongitude(double)' in program class com.mobfox.sdk.Banner
Warning: com.mobfox.sdk.adapters.MoPubInterstitialAdapter: can't find referenced method 'void setLatitude(double)' in program class com.mobfox.sdk.Banner
[2/9/16, 8:29:21 AM] Yu Chen!!: Iā€™m on latest for both the adapter and the sdk, this is an error from pro guard

No ads without location permission

No banner ads are loaded if app does not have permission ACCESS_FINE_LOCATION. So this permission seems to be mandatory. Even worse: If the manifest contains this permission but user did not grant this permission the ad itself asks the user for the permission. It is not a good idea that an app needs this privacy related permission just because of the ads.

Solution: Banner should have be a method like "setUseLocation(boolean)" to disable this behavior.

Also READ_PHONE_STATE permission should not be mandatory.

Not able load more than 4 ads at a time

I have integrated MobFox SDK in my Android app, In Home screen i am showing around 10 ads. but ads are not being loaded.
The issue which i can seen in logcat is:

D/MobFoxWebView: mobfox webview init
D/MobFoxUtils: read FileNotFoundException
D/MobFoxBanner: request params: {"s":"db91e065be27eaf7f70b03ce708b2b69","o_andadvid":"7e8f7ee2-7502-4522-9ac2-c6f727e549a6","type":"waterfall","adFormat":"banner","autoplay":"true","skip":"","debug":"","rt":"android_app","adspace_width":300,"adspace_height":50,"adspace_strict":0,"sub_bundle_id":"com.lightbox.sessionsx.uat","auto_pilot":true,"v":"Core_3.1.2","secure":false,"start_muted":false,"dev_js":1,"banner_pos":1,"dev_dnt":0}
D/MobFoxWebView: ready
D/MobFoxWebView: data >>> :{"customEvents":[],"ad":{"request":{"htmlString":{"__cdata":"PGJvZHkgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO3BhZGRpbmc6MDsiPjxhIGhyZWY9Imh0dHA6Ly90b2t5by1teS5tb2Jmb3guY29tL2V4Y2hhbmdlLmNsaWNrLnBocD9oPWQzZTkwZWE5MTFhNDM5YjljNTY3OTI5NmM2NGY3NTcwIiA+PGltZyBzcmM9Imh0dHBzOi8vYWQuZG91YmxlY2xpY2submV0L2RkbS9hZC9ONjI2Ny4xOTE3OTM5U0lMVkVSUFVTSC9CMTA3MTY4NDguMTQzMDY5MzI3O2Ficj0haWU0O2Ficj0haWU1O3N6PTMwMHgyNTA7b3JkPTE0ODIyMTY3MzkzNzk7ZGNfbGF0PTtkY19yZGlkPTt0YWdfZm9yX2NoaWxkX2RpcmVjdGVkX3RyZWF0bWVudD0\/IiB3aWR0aD0zMDAgaGVpZ2h0PTI1MC8+PGltZyBzcmM9IiIgc3R5bGU9IndpZHRoOjFweDsgaGVpZ2h0OjFweDsgZGlzcGxheTpOb25lIi8+PGltZyBzcmM9IiIgc3R5bGU9IndpZHRoOjFweDsgaGVpZ2h0OjFweDsgZGlzcGxheTpOb25lIi8+PC9hPjxpbWcgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OiAtMTAwMDBweDsiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHNyYz0iaHR0cDovL3Rva3lvLW15Lm1vYmZveC5jb20vZXhjaGFuZ2UucGl4ZWwucGhwP2g9ZDNlOTBlYTkxMWE0MzliOWM1Njc5Mjk2YzY0Zjc1NzAiLz48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ZG9jdW1lbnQud3JpdGUoJzxpbWcgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OiAtMTAwMDBweDsiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHNyYz0iaHR0cDovL3Rva3lvLW15Lm1vYmZveC5jb20vZXhjaGFuZ2UucGl4ZWwucGhwP2g9ZDNlOTBlYTkxMWE0MzliOWM1Njc5Mjk2YzY0Zjc1NzAmdGVzdD0xIi8+Jyk7PC9zY3JpcHQ+PC9ib2R5Pg=="},"clicktype":"safari","clickurl":{"__cdata":"http:\/\/tokyo-my.mobfox.com\/exchange.click.php?h=d3e90ea911a439b9c5679296c64f7570"},"urltype":"link","refresh":"30","scale":"no","skippreflight":"yes","_type":"textAd"},"encoded":true,"params":{"s":"db91e065be27eaf7f70b03ce708b2b69","o_andadvid":"7e8f7ee2-7502-4522-9ac2-c6f727e549a6","autoplay":"true","debug":"","rt":"android_app","adspace_width":300,"adspace_height":250,"adspace_strict":0,"sub_bundle_id":"com.lightbox.sessionsx.uat","auto_pilot":true,"v":"Core_3.1.2","start_muted":false,"dev_js":1,"banner_pos":3,"dev_dnt":0,"imp_secure":0,"m":"live","c_mraid":2,"u":"Mozilla\/5.0 (Linux; Android 5.0; Lenovo A7000-a Build\/LRX21M; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/55.0.2883.91 Mobile Safari\/537.36","c_customevents":"1"},"options":{"skip":false,"enforceSize":false}},"type":"banner"}
D/MobFoxBanner: on ad response > 3566
E/chromium: [ERROR:interface_registry.cc(104)] Failed to locate a binder for interface: autofill::mojom::PasswordManagerDriver

No Activity found to handle Intent crash

Not sure if this used to happen with the older SDK. But would it be possible to fail silently in case Play Services is not available? Considering that AdMob works without Play Services, it'd be nice if MobFox doesn't crash the app.

E/MobFoxLog: GooglePlayServicesNotAvailableException
             com.google.android.gms.common.GooglePlayServicesNotAvailableException
                at com.google.android.gms.ads.identifier.AdvertisingIdClient.zzp(Unknown Source)
                at com.google.android.gms.ads.identifier.AdvertisingIdClient.zzb(Unknown Source)
                at com.google.android.gms.ads.identifier.AdvertisingIdClient.getAdvertisingIdInfo(Unknown Source)
                at com.mobfox.sdk.GetAdvertisingIdTask.doInBackground(GetAdvertisingIdTask.java:28)
                at com.mobfox.sdk.GetAdvertisingIdTask.doInBackground(GetAdvertisingIdTask.java:16)
                at android.os.AsyncTask$2.call(AsyncTask.java:288)
                at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                at java.lang.Thread.run(Thread.java:841)

E/MobFoxLog: NullPointerException
             java.lang.NullPointerException
                 at com.mobfox.sdk.GetAdvertisingIdTask.doInBackground(GetAdvertisingIdTask.java:42)
                 at com.mobfox.sdk.GetAdvertisingIdTask.doInBackground(GetAdvertisingIdTask.java:16)
                 at android.os.AsyncTask$2.call(AsyncTask.java:288)
                 at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                 at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                 at java.lang.Thread.run(Thread.java:841)

Auto opening ads

Hello. We have reports of ads opening by themselves without user clicking on them.

We suspect they might be coming from MobFox.
Will Banner.setDev_js(0) help us in preventing this kind of ads?

Unfortunately we don't have any logs, just some screenshots.

Thanks

screenshot_2016-08-12-09-45-35

AbstractMethodError - Using MoPub custom event network.

When using a custom event network on MoPub for MobFox I get this error:

                                                           java.lang.AbstractMethodError: abstract method "void com.mopub.nativeads.CustomEventNative.loadNativeAd(android.content.Context, com.mopub.nativeads.CustomEventNative$CustomEventNativeListener, java.util.Map, java.util.Map)"
                                                               at com.mopub.nativeads.CustomEventNativeAdapter.loadNativeAd(CustomEventNativeAdapter.java:47)
                                                               at com.mopub.nativeads.MoPubNative.onAdLoad(MoPubNative.java:232)
                                                               at com.mopub.nativeads.MoPubNative.access$000(MoPubNative.java:37)
                                                               at com.mopub.nativeads.MoPubNative$2.onSuccess(MoPubNative.java:93)
                                                               at com.mopub.network.AdRequest.deliverResponse(AdRequest.java:310)
                                                               at com.mopub.network.AdRequest.deliverResponse(AdRequest.java:46)
                                                               at com.mopub.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
                                                               at android.os.Handler.handleCallback(Handler.java:739)
                                                               at android.os.Handler.dispatchMessage(Handler.java:95)
                                                               at android.os.Looper.loop(Looper.java:148)
                                                               at android.app.ActivityThread.main(ActivityThread.java:5461)
                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Using com.mopub:mopub-sdk-native-static:4.11.0 and MobFox SDK 3.1.2 with the latest MobFox-Android-MoPub-Adapter.jar

Why is the library compiled with SDK Level 23?

Would love to know what the exact reason is that causes you to compile with SDK Level 23, perhaps there's a workaround to allow for more compatibility, this has started causing issues on our distribution.

We tried hard to keep building our app with SDK 16, but it was impossible to do so once we included MobFox. None of the other AdNetwork's SDKs we've used demand such high API Level.

CC: @aldenml

handshake failure when displaying banner

hi, i receive this error (in logcat) and no ad is showed
this is the complete logcat, any help?

07-11 12:36:04.185 30589-30589/com.matteogabella.chatbot E/MobFoxBanner: on error
javax.net.ssl.SSLHandshakeException: Handshake failed
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:390)
at android.net.SSLCertificateSocketFactory.verifyHostname(SSLCertificateSocketFactory.java:196)
at android.net.SSLCertificateSocketFactory.createSocket(SSLCertificateSocketFactory.java:441)
at com.android.okhttp.Connection.upgradeToTls(Connection.java:175)
at com.android.okhttp.Connection.connect(Connection.java:155)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:332)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:500)
at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:25)
at com.mobfox.sdk.networking.MobFoxRequest$1.doInBackground(MobFoxRequest.java:151)
at com.mobfox.sdk.networking.MobFoxRequest$1.doInBackground(MobFoxRequest.java:118)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb4069c00: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:770 0xabef5dd4:0x00000000)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:318)
... 19 more

Mopub Custom Event native

Hey,

Would be great to add support for native ads using the SDK and mopub as the mediator.

Thanks.

No Source Code.

Your website advertises your SDK as OpenSource, however, I have to decompile your classes in order to see what's going on. I can't find things like InterstitialAd.java for example.

Where is that code? You don't want the FTC nailing you for misleading advertising.

All I see is the .jar releases.

setGetLocation in static method (was 'Ad independently asks user of app for ACCESS_FINE_LOCATION permission on Android 6')

This has not been fixed with 2.0.9, just tested.

If the manifest contains this permission but user did not grant this permission the ad independently asks the user for this permission. It is not a good idea that a user has to grant this privacy related permission just because of the ads.
Possible Solutions:
(a) On Android 6+, check if user has granted this permission. Do not try to query location if user has not granted this permission.
(b) Provide a method like in iOS to globally disable usage of location services for banners
Solution (a) would be smarter!

com.mobfox.adapter.MobFoxAdapter implements wrong interface

In AdMob mediation, when using MobFox, the sdk tries to load the class com.mobfox.adapter.MobFoxAdapter but fails with this error:
W Ads : Could not instantiate mediation adapter: com.mobfox.adapter.MobFoxAdapter (not a valid adapter).

This happens because MobFoxAdapter is currently implementing the interface CustomEventBanner which is for custom event adapter and not for integrated mediation adapters
Instead it should be implementing the interface MediationBannerAdapter

AdMob memory leak

AdMob causes a memory leak when the activity is destroyed. As noted in this SO answer, the leak doesn't happen if application context is provided.
However, in one of the comments it is mentioned that mediation could take a hit.
So, could you please tell me if MobFox's adapter would suffer in case I use application context while creating an AdView?

Location enabled by default

Hi guys. The android.permission.ACCESS_FINE_LOCATION permission is enabled by default in the Manifest of your 3.1.0 version.

java.lang.NullPointerException loading interstitial

java.lang.NullPointerException
    at android.app.ContextImpl.openFileOutput(ContextImpl.java:729)
    at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:179)
    at com.mobfox.sdk.utils.Utils.write(Utils.java:107)
    at com.mobfox.sdk.dmp.DMP.update(DMP.java:93)
    at com.mobfox.sdk.dmp.DMPManager.updateDMP(DMPManager.java:26)
    at com.mobfox.sdk.bannerads.Banner.postDMP(Banner.java:510)
    at com.mobfox.sdk.bannerads.Banner.init(Banner.java:347)
    at com.mobfox.sdk.bannerads.Banner.load(Banner.java:375)
    at com.mobfox.sdk.interstitialads.InterstitialAd.load(InterstitialAd.java:288)
    at com.frostwire.android.offers.MobFoxAdNetwork$1.run(MobFoxAdNetwork.java:156)
    at android.os.Handler.handleCallback(Handler.java:730)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:152)
    at android.app.ActivityThread.main(ActivityThread.java:5136)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:744)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    at dalvik.system.NativeStart.main(Native Method)

Our code looks like this:

public void loadNewInterstitial(Activity activity) {
        LOG.info("loadNewInterstitial invoked by thread (@"+ Thread.currentThread().hashCode() +") " + Thread.currentThread().getName());
        if (interstitialAd != null &&
            interstitialAdListener != null &&
            interstitialAdListener.isAfterBehaviorConfigured()) {
            LOG.info("loadNewInterstitial aborted. Ad is good to go already.");
            return;
        }

        long timeSinceLastLoad = System.currentTimeMillis() - lastInterstitialLoadTimestamp;
        if (timeSinceLastLoad < INTERSTITIAL_RELOAD_INTERVAL_IN_SECONDS*1000) {
            LOG.info("loadNewInterstitial aborted. too early for a load.");
            return;
        }
        LOG.info("loadNewInterstitial - time since last load: " + timeSinceLastLoad + "ms");
        lastInterstitialLoadTimestamp = System.currentTimeMillis();

        LOG.info("loadNewInterstitial - (MobFoxAdnetwork@" + this.hashCode());
        interstitialAd = new InterstitialAd(activity);
        Banner.setGetLocation(askForLocationPermissions());
        interstitialAd.setInventoryHash(Constants.MOBFOX_INVENTORY_HASH);
        interstitialAd.setListener(interstitialAdListener);

        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // it can happen that the network is stopped right before this call
                if (interstitialAd != null) {
                    interstitialAd.load();
                    INTERSTITIAL_RELOAD_RETRIES_LEFT--;
                }
            }
        });
    }

Your code should look something like this, the issue seems to be triggered inside an async task:

AsyncTask task = new AsyncTask() {
                    protected Void doInBackground(Void... params) {
                        Info adInfo = null;

                        try {
                            adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context);
                            String id = adInfo.getId();
                            Bundle bundle = new Bundle(id);
                            bundle.addData(context, DMP.this.data, IPAddress, ua);
                            String s = bundle.toString();
                            Utils.write(context, DMP.BUNDLE_FILE, s); // HERE. Might want to add some protections
                        } catch (Exception var6) {
                            ;
                        }

                        return null;
                    }
                };

We also recommend you start refactoring your code base to get rid of all use of AsyncTask, it's one of those Android APIs that shouldn't be there. We recommend you use as few Executor Pools and just submit runnables, and then if you have to do something in the UI thread, then you invoke another runnable on the UI thread, or post it via Handler. Works better.

More on the subject
http://simonvt.net/2014/04/17/asynctask-is-bad-and-you-should-feel-bad/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    šŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. šŸ“ŠšŸ“ˆšŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ā¤ļø Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.