Skip to main content

Simple example of strong and weak pointers on Android using RefBase class

Here is a simple example explaining the usage of strong and weak pointers using android's RefBase class and the Android.mk to compile the same. Its a modified version of code written by Daniel in the following link.


strong_pointer.cpp file: 

#include <stdio.h>
#include "utils/RefBase.h"

namespace android { 
class RefTest : public RefBase {
public:
    RefTest(int32_t id) : mID(id) {
        printf("RefTest ctor: %d\n", mID);
    }
    virtual ~RefTest() {
        printf("RefTest dtor: %d\n", mID);
    }
    int32_t id() const {
        return mID;
    }
private:
    int32_t mID;
};

int strong_pointer() {
    sp<RefTest> ref1 = new RefTest(1);
    sp<RefTest> ref5;

    {
    sp<RefTest> ref2 = new RefTest(2);
    ref5 = ref2; // comment this out and check when the destructor of ref2 is called
    }
    wp<RefTest> ref3 = ref1;
    sp<RefTest> ref4 = ref3.promote();
    if (ref4 == NULL) {
        printf("RefTest object is destroyed\n");
    } else {
        printf("RefTest object %d is still around\n",
            ref4->id());
    }
    ref4 = NULL;
    ref1 = NULL; // comment this out to check to check change in prints
    ref4 = ref3.promote();
    if (ref4 == NULL) {
        printf("RefTest object is destroyed\n");
    } else {
        printf("RefTest object %d is still around\n",
            ref4->id());
    }
    printf("Before return \n"); 
    return 0;
}
}

int main()
{
    android::strong_pointer();
    return 0;
}

Android.mk file:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:=                       \
        strong_pointer.cpp            

LOCAL_MODULE:= strong_pointer

LOCAL_SHARED_LIBRARIES := \
        libutils    \

LOCAL_MODULE_TAGS := optional

LOCAL_C_INCLUDES := \
        frameworks/native/include \

include $(BUILD_EXECUTABLE)


Comments

Post a Comment

Popular posts from this blog

Getting and Setting Microphone Gain or Microphone Boost on Windows 7 / 8 Programmatically

After hours of searching the net I have finally figured out a way to programmatically get and set the microphone gain (boost) value. The code mentioned below can be built on VS and does the job of setting gain value. #include "stdafx.h" #include <mmdeviceapi.h> #include <endpointvolume.h> #include <Functiondiscoverykeys_devpkey.h> #include "Audioclient.h" #include "comutil.h" #define EXIT_ON_ERROR(hres)   if (FAILED(hres)) { goto Exit; } #define SAFE_RELEASE(punk)   if ((punk) != NULL)  { (punk)->Release(); (punk) = NULL; } HRESULT getMicrophoneBoostVolumeLevel(IMMDevice *pEndptDev, IAudioVolumeLevel** ppVolumeLevel) { HRESULT hr = S_OK; DataFlow flow; IDeviceTopology *pDeviceTopology = NULL; IConnector *pConnFrom = NULL; IConnector *pConnTo = NULL; IPart *pPartPrev = NULL; IPart *pPartNext = NULL; *ppVolumeLevel = NULL; wchar_t microphoneBoostName[] = L"Microphone Boost";//if your system

Acts Automation Framework For Android

1. Introduction The Android Comms Test Suite, is a lightweight Python-based automation tool set that is used to perform automated testing of current and upcoming Android devices. It provides a simple execution interface; a set of pluggable libraries for accessing commercially available devices, Android devices, and a collection of utility functions to further ease test development. It is an ideal desktop tool for a wireless stack developer or integrator whether exercising a new code path, performing sanity testing, or running extended regression test suites. Included in the tests/google directory are a bundle of tests, many of which can be run with as little as one or two Android devices with wifi, cellular, or bluetooth connectivity, including: 1. Wifi tests for access point interopability, enterprise server integration, WiFi scanning, WiFi auto join, and round trip time. 2. Bluetooth tests for low energy, GATT, SPP, and bonding. 3. Cellular tests for circuit switch and