기본 콘텐츠로 건너뛰기

계단 다이어트 37주차, 15.5kg 감량

계단 다이어트 37주차, 15.5kg 감량 체중 관련해서 마지막 업로드가 26주차 였습니다.   벌써 11주가 지났내요. 그 때부터 지금까지 아직 다이어트한 체중은 잘 유지하고 있습니다.   급하게 많이 빼지 않기 위해서 노력을 하면서 조금씩 빠지고 있습니다.   그래서 운동을 아침에만 계단오르기 100층을 진행하고   아침과 저녁에는 근력운동을 같이 병행하면서 진행하고 있습니다.   근력을 키우기 위해서 단백질을 더 먹고 덤벨 무게나 운동량을 늘릴려고 노력합니다. 식단은 하루 2끼를 먹으며   아침에는 평소대로 먹고 (9시~9시반) 저녁에는 닭가슴살 200g~300g + 계란후라이 3개 (4시~5시) 위와 같이 아침과 저녁을 먹고 별도로 야식은 먹지 않습니다.   토-일 주말에는 그냥 친구와 술 먹고 평소 먹고 싶은 것을 먹고 쉽니다.   (당연히 이러면 월요일에 2.5 ~ 3kg 정도 체중이 증가 합니다.) 다만 요즘은   목요일 즘 되면 목표 체중에 도달을 하는데(2kg 조금 넘게 빠집니다.) 그러면 저녁에는 그냥 밥을 먹는 일반 식단을 해서 (다이어트 식단을 하지 않고) 체중 감소가 너무 급격하게 되는걸 막으려고 하고 있습니다.   그래도 너무 빠지면 금요일에는 운동을 쉬는 경우도 있습니다. 최근에 공복 혈당 측정을 오랜만에 해봤는데   100에 더 가깝게 측정이 되어서 다이어트 효과를 좀 보고 있는것 같습니다.   (공복혈당 : 102, 2024.11 건강검진에서는 114) 11월이 1주년인데 그 때까지 꾸준히 유지하도록 하겠습니다. 시작 : 2024.11.13 기간 : 2025.7.18 (37주차) 시작 체중 : 78.5 현재 체중 : 63.0 (체중은 아침에 일어나서 밥먹기 전에 측정, 해당 주에 가장 낮은 측정값) 운동방식 : 계단오르기 난이도 : 1회 100층   횟수 : 하루 2번, 아침과 저녁 (100층 x 2 = 하루 총 20...

AsyncTask 을 iOS block Code 처럼 (비슷하게??)

iOS 로 먼저 작업을 하고 
안드로이드에서 작업을 하면서 iOS의 dispatch Queue 블록 코딩처럼 
코드에서 바로 AsyncTask 로 백그라운드 코딩을 넣고 작업이 끝나면 mainThread 에서 나머지 ui thread 작업을 하도록 할 수 없을까 고민하다가 만든 소스

프로젝트에 GlobalThread Class 파일을 만들어서 구성을하고
아래의 사용방식으로 소스에서 바로 불러서 구성 



-- GlobalThread 사용 --

GlobalThread globalThread = new GlobalThread(this, false, new Handler() {

    //final EchoCallBack cback = callback;    public void handleMessage(Message msg) {
        // 각 화면에 갱신 (데이터 가져오기) 요청을 보낸다        //stopIndicatorDialog();        
        -- 메인쓰레드에서 하는 동작을 여기서 처리 --

    }
}){
    @Override    protected Object doInBackground(Object... params) {

        gLog("doInBackground 2");

        -- 백그라운드 동작은 여기서 처리 --
        -- 파라메터를 받아서 처리 가능 --

        return super.doInBackground(params);
    }
};

globalThread.execute(-- 여기에 복수의 데이터를 전달하면 doInBackground 에서 데이터를 받음 --);


-- GlobalThread class --

public class GlobalThread extends AsyncTask<Object, Integer, Object> {

    public Context gContext = null;
    public Handler handler = null;
    boolean showDialog = false; // 다이얼로그 표시 여부    MyProgressDialog pdialog = null;

    public GlobalThread(Context context, boolean showdialog, Handler handler) {
        this.handler = handler;
        gContext = context;
        showDialog = showdialog;
    }

    public void gLog(String logMessage){
        DebugLog.debug(gContext, "GlobalThread : "+logMessage);
    }

    private void dismissDialog(){
        if(showDialog == true && pdialog != null){
            pdialog.dismiss();

            new WeakReference<Object>(pdialog);
            pdialog = null;
        }
    }

    private void showDialog(){
        dismissDialog();

        if(gContext != null && showDialog == true){

            if(pdialog == null){
                pdialog = MyProgressDialog.show(gContext, "", "", true, false, null);;
            }
        }
    }

    /**     * AsyncTask     * @param params     * @return     */    @Override    protected Object doInBackground(Object... params) {
        // 백그라운드에서 실제 해야하는 것을 이곳에        DebugLog.debug(gContext, "GlobalThread (doInBackground)");

        if(params != null && params.length > 0){
            return params[0];
        }

        return null;
    }

    /**     * AsyncTask     */    @Override    protected void onCancelled() {

        super.onCancelled();
    }

    /**     * AsyncTask     * @param result     */    @Override    protected void onPostExecute(Object result) {
        // 백그라운드(doInBackground)에서 진행이 되고 실행됨        // 리턴된 갓이 파라메터로 전달
        dismissDialog();

        DebugLog.debug(gContext, "GlobalThread (onPostExecute)");
        Message msg = this.handler.obtainMessage();
        msg.obj = result;
        msg.what = 0;

        this.handler.sendMessage(msg);

        super.onPostExecute(result);
    }

    /**     * AsyncTask     */    @Override    protected void onPreExecute() {
        // TODO Auto-generated method stub        DebugLog.debug(gContext, "GlobalThread (onPreExecute)");

        showDialog();

        super.onPreExecute();
    }

    /**     * AsyncTask     * @param values     */    @Override    protected void onProgressUpdate(Integer... values) {
        // TODO Auto-generated method stub        DebugLog.debug(gContext, "GlobalThread (onProgressUpdate)");

        super.onProgressUpdate(values);
    }
}

이 블로그의 인기 게시물

애드몹 계정 정지 최대한 방지 하는 방법 (나의 생각)

아직까지는 앱에서 계정 정지가 당하는 사태가 오지 않았지만   주변에 애드몹 계정 정지를 당하는 사태가 아직도 빈번하게 발생을 해서 글을 적어 본다.   1. 테스트 광고 id 사용  ! https://developers.google.com/admob/ios/test-ads?hl=ko   위 사이트 보며 데모 광고 id 가 광고 종류 별로 존재한다.   앱코드에서 개발 모드와 배포 모드로 분기를 할 수 있다면   개발 모드에서는 저 데모 광고 id 를 적용해서 항상 어느 상황이던 데모 광고가 표시되도록 하는게 좋지 않을까 싶다.   2. 테스트 디바이스 id 사용   앱 빌드 하면 로그 창에 테스트 디바이스 id 를 등록하라고 특정 글자가 표시된다.   그걸 아래와 같은 함수에 적용 해주면 테스트 광고가 표시된다.   GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers   예전 광고 UDID 이슈가 없을 때는 괜찮았는데   요즘은 저 거만 너무 믿으면 저거 적용하기 전에 일반 광고가 표시될 가능성이 높고   저게 주기적으로 빌드하면서 랜덤하게 계속 바뀌어서 엄청 불편하다. 그래서 나는 어느 순간 부터는 저거는 그냥 무시하고 안쓰는 편이고 다음 테스트기기 등록을 하는 편이 더 좋다.   3. 테스트 기기 등록  !!! 애드몹 웹사이트로 이동하면   좌측 메뉴 중에 “설정” - “기기 테스트” 항목에 애플/안드로이드 기기의 광고 ID 를 등록할 수 있다.   등록을 하면 앱 실행 시 바로 광고 ID 가 표시된다.   iOS 경우에는 IDFA 허용 팝업 이후에 테스트 광고가 표시되니까   개인적으로 iOS 개발의 경우에는 처음 앱 실행하고 광고 요청 자체를 IDFA 광고 팝업 후에 하는 것도 좋지 않을까 싶다.  ...

애드몹(AdMob) 앱 광고 수익 2023년 1월 $4000

애드몹(AdMob) 앱 광고 수익 2023년 1월 2023 년 새해 첫 애드몹 수익이 나왔습니다.  저번달 보다 클릭 수는 증가했는데  수익은 줄어든게 좀 인상 깊내요.  전반적으로 대부분의 항목이 많이 줄어들었습니다. 

애드몹(AdMob) 앱 광고 수익 2023년 3월 $3748

 애드몹(AdMob) 앱 광고 수익 2023년 3월 저번 달과 광고 수익이 거의 비슷합니다.  클릭 수는 저번달에 비해서 17% 줄었지만 광고 수익은 소폭 상승했습니다.  광고 단가가 높았거나 리워드 광고 영향일 수도 있겠습니다.