【转】UML建模與Android應用程式開發(下)

 

經過兩個觀點的互相核對與逐步修正後,的確呈現出極為完美的程式碼,如下:

 

Android應用程式Project

 

這包含了1個IA.java介面定義檔,及兩個應用子類定義檔:  

 

 應用程式碼

一致化的程式碼如下所示:

 

// IA.java接口

 

package com.misoo.pk01;

import android.os.Binder;

import android.os.IBinder;

import android.os.Parcel;

import android.os.RemoteException;

 

public interface IA {

 

    int f1(int x)throws RemoteException;

 

    public static abstract class Stub extends Binder implements IA {

 

            @Override

                public boolean onTransact(int code, Parcel data, Parcel reply, int flags)

 

                               throws android.os.RemoteException  {

                   int x = data.readInt();

                   int y = this.f1(x);

                   reply.writeInt(y);

                   return true;

                }

 

       public abstract int f1(int x) throws RemoteException;

 

       public static IA asInterface(IBinder obj){

                   return new Proxy(obj);

      }

 

          //--------------------------------------------- 

 

    private static class Proxy implements IA{

 

       private IBinder mRemote;

 

               public Proxy(IBinder ibinder)  {

                       mRemote = ibinder;

               }

 

       public int f1(int x) throws RemoteException {

 

                    // TODO Auto-generated method stub

 

                    Parcel data = Parcel.obtain();

                    data.writeInt(x);

                    Parcel reply = Parcel.obtain();

                    mRemote.transact(0, data, reply, 0);

                    return reply.readInt();

            }

    }

  }

}

 

 // myService.java

 

package com.misoo.pk01;

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import android.os.RemoteException;

 

public class myService extends Service {

 

        @Override

        public IBinder onBind(Intent intent) {

                return mBinder;

        }

 

        public int mySf1(int x){

                return x + 1000;

        }

 

        //---------------------------------------------

 

        private final IA.Stub mBinder = new IA.Stub() {

 

                @Override

                public int f1(int x) throws RemoteException {

                        return mySf1(x);

                }

    };

}

 

// myActivity.java

 

package com.misoo.pk01;

import android.app.Activity;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

import android.graphics.Color;

import android.os.Bundle;

import android.os.IBinder;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.TextView;

 

public class myActivity extends Activity implements OnClickListener {

 

        private final int WC = LinearLayout.LayoutParams.WRAP_CONTENT;

        private final int FP = LinearLayout.LayoutParams.FILL_PARENT;

 

        private Button btn, btn2;

        private TextView tv;

 

        private IA ia;

        private int state_var_A = 0;

 

    public void onCreate(Bundle icicle) {

 

                super.onCreate(icicle);

 

                if(state_var_A == 0){

                        show_layout_01();

                        goto_state_01();

                }

    }

 

    private void show_layout_01(){

                LinearLayout layout = new LinearLayout(this);

                layout.setOrientation(LinearLayout.VERTICAL);

                btn = new Button(this);

                btn.setBackgroundResource(R.drawable.heart);

 

                btn.setId(101);

                btn.setText("Run");

 

                btn.setOnClickListener(this);

                LinearLayout.LayoutParams param =  new LinearLayout.LayoutParams(120, 55);

                param.topMargin = 10;

                layout.addView(btn, param);

                

                btn2 = new Button(this);

                btn2.setBackgroundResource(R.drawable.heart);

                btn2.setId(102);

                btn2.setText("Exit");

                btn2.setOnClickListener(this);

                layout.addView(btn2, param);

 

                tv = new TextView(this);

                tv.setTextColor(Color.WHITE);

                tv.setText("");

                LinearLayout.LayoutParams param2 = new LinearLayout.LayoutParams(FP, WC);

 

                param2.topMargin = 10;

                layout.addView(tv, param2);

                setContentView(layout);

          }

 

   private void goto_state_01(){

       state_var_A = 1;

       bindService(new Intent("com.misoo.pk01.REMOTE_SERVICE"), mConnection, Context.BIND_AUTO_CREATE);

   }

 

   private ServiceConnection mConnection = new ServiceConnection() {

 

         public void onServiceConnected(ComponentName className, IBinder ibinder) {

                        ia = IA.Stub.asInterface(ibinder);

         }

 

          public void onServiceDisconnected(ComponentName className) { }

    };

 

 

    public void onClick(View v) {

         int ret=0;

                switch(v.getId()){

                  case 101:

                          if(state_var_A == 1){

                              try {

                                       ret = ia.f1(188);

                              } catch (Exception e) {

                                       e.printStackTrace();

                              }

                          tv.setText(String.valueOf(ret));

                          }

                  break;

 

                  case 102:

                          if(state_var_A == 1) {

                             stopService(new Intent("com.misoo.pk01.REMOTE_SERVICE"));

                             finish();

                          }

                  break;

                }

        }

   }

 

結語

在傳統觀點裡,大多先繪製UML模型圖,然後才開始構思程式碼的撰寫,使得UML建模成為撰寫程式碼的前置工作,因此許多程式員將UML建模視為多餘的負擔。為了節省開發成本,就將省略掉UML建模的工作了。

 

在新潮的觀點裡,UML模型與程式碼是軟體系統本體的兩個觀點(或面向),兩者沒有先後順序關係,而是並存和兼具於同一個人的腦海裡。這就像兩隻眼睛看到的景象並存於一個人的腦海裡一般,如此才能看到更真實的世界,也能做出更完美的軟體系統來。從本文的範例,你可看到當UML模型與程式碼兩個觀點一致時,真的能讓軟體系統既可靠又高雅,不亦美哉!

 

原文链接:http://www.android1.net/Topic.aspx?BoardID=21&TopicID=1452

你可能感兴趣的:(android,service,layout,import,button,UML)