>Java >java지도 시간 >J2ME 학습 - 입문부터 숙련까지 RMS

J2ME 학습 - 입문부터 숙련까지 RMS

黄舟
黄舟원래의
2016-12-19 13:54:431849검색

기록관리 시스템은 애플리케이션에서 로컬 데이터를 지속적으로 저장하는 것을 목표로 하는 J2ME의 중요한 하위 시스템입니다. 현재 파일시스템을 지원하는 모바일 정보기기는 제한되어 있으므로, 기록을 남겨두세요. 관리 시스템은 J2ME 개발자가 로컬 데이터 저장소를 구현하는 데 선호되는 방법입니다. 이 글의 목적은 기록관리(Record Management)를 종합적으로 소개하는 것입니다. 시스템 지식.
 
기록관리시스템은 이름에서 알 수 있듯이 데이터를 관리하는 시스템으로, 시스템에서 가장 중요한 것은 기록이다. 모바일 기기의 저장공간에 저장되는 것은 필드가 아닌 바이트 배열입니다. MIDP(Mobile Information Device PROfile) 사양에는 어떤 종류의 데이터가 레코드로 저장될 수 있는지 규정되어 있지 않습니다. 실제로 레코드는 사진, 텍스트 등 바이트 배열로 표현될 수 있는 모든 데이터입니다. 기록 관리 시스템의 책임은 레코드를 저장하고 고유하게 식별하는 것이며, 데이터를 표현하는 작업은 애플리케이션에 의해 완료됩니다. 따라서 J2ME 개발자는 종종 저장 공간에서 데이터를 처리하는 데 더 많은 에너지를 소비해야 합니다. 이것의 목적은 MIDP 구현을 단순화하고 J2ME 하위 시스템을 가능한 한 작고 유연하게 만드는 것입니다. 결국 모바일 정보 장치에는 저장 공간과 프로세서 기능이 제한되어 있습니다.
 
 레코드 스토어는 일련의 레코드를 모아 놓은 집합체입니다. 레코드는 단독으로 존재할 수 없으며 반드시 레코드 스토어에 속해야 합니다. 레코드 저장소는 레코드의 읽기 및 쓰기 작업이 원자적으로 수행되고 데이터가 삭제되지 않도록 보장합니다. API에서 Record Store는 javax.microedition.rms.RecordStore에 의해 구현됩니다. RecordStore의 구체적인 작업은 다음 문서에서 자세히 소개됩니다.
 
 MIDP 사양에 따르면 모바일 정보 장치는 애플리케이션이 데이터의 지속적인 저장을 달성하기 위해 최소 8K의 비휘발성 저장 공간을 제공해야 합니다. 그러나 서로 다른 장치가 제공하는 공간은 동일하지 않습니다. MIDlet의 경우 이 제품군은 기록 관리를 사용합니다. 그런 다음 MANIFEST 파일 및 JAD 파일에서 MIDlet-Data-Size를 바이트 단위로 설정하여 필요한 최소 데이터 저장 공간을 지정해야 합니다(예: MIDlet-Data-Size: 8192). 값이 모바일 장치에 지정된 최대값을 초과하면 애플리케이션이 올바르게 설치되지 않습니다. 이 값은 모바일 장치가 실제로 애플리케이션에 제공하는 최대 레코드가 아닙니다. 관리 시스템 저장 공간이 더 큰 경우가 많으므로 개발자는 애플리케이션에 필요한 최소 저장 공간을 너무 크게 설정하지 말고 필요한 경우 해당 장치의 사용 설명서를 참조해야 합니다. 비휘발성 저장 공간에서는 데이터를 읽고 쓰는 속도가 느린 경우가 많기 때문에 자주 액세스하는 데이터의 성능을 향상시키기 위해 캐싱 메커니즘을 제공하는 것이 가장 좋습니다. 기록 관리 시스템의 읽기 및 쓰기 작업은 스레드로부터 안전하지만 레코드 저장소는 전체 MIDlet에 의해 제어되기 때문에 Suite는 공유되므로 서로 다른 MIDlet에서 실행되는 스레드가 레코드 저장소를 작동하는 경우 데이터 손상을 방지하기 위해 필요한 스레드 동기화를 수행해야 합니다.
 
 MIDP1.0 및 MIDP2.0의 기록에 대하여 동일한 MIDlet Suite의 MIDlet은 서로의 레코드에 액세스할 수 있는 관리 시스템의 구현이 다소 다릅니다. 가게. 그러나 MIDP1.0 구현에서는 서로 다른 MIDlet Suite 간에 레코드를 공유하기 위한 규정이 없습니다. 저장소 메커니즘. 서로 다른 MIDlet Suite 간에 레코드를 공유하는 문제를 해결하기 위해 MIDP2.0에는 새로운 API가 제공됩니다. Store 문제에 관해서는 Record Store 생성 시 인증 모드와 읽기/쓰기 제어 매개변수를 통해 공유 메커니즘이 관리됩니다. 이에 대해서는 다음 글에서 자세히 소개하겠습니다.
 
기록 강화 관리 시스템을 이해하는 가장 좋은 방법은 실제 개발을 수행하는 것입니다. 개발 중에 모바일 장치의 모든 MIDP 구현이 정확하지는 않다는 것을 알았습니다. getSizeAvaliable() 메서드를 사용하여 Nokia6108의 사용 가능한 레코드를 쿼리할 때 Store 공간을 사용해서 얻은 값이 1M byte 가 넘었는데, 40K 데이터를 썼을 때 RecordStoreFullException 예외가 발생해서 자동 테스트폰 기록을 작성했습니다. 가장 큰 저장 공간에 소프트웨어를 저장하십시오. 100~500밀리초 등 특정 시간마다 Record에 데이터를 보내는 것이 원칙입니다. 저장소에 1K 바이트의 데이터를 씁니다. 저장 공간이 가득 찼다는 예외가 발생하면 최대 값을 얻을 수 있습니다. 정확한 단위는 K 바이트입니다. 다음은 프로그램의 소스코드와 JAD 파일의 내용이다. 개발 플랫폼은 Eclipse3.0RC2+EclipseME0.4.1+Wtk2.1+J2SDK1.4.2._03이며 실제 Nokia 6108에서 테스트를 통과한 것으로 나타났다. 최대값은 31K입니다. (시뮬레이터에서 테스트하지 마세요. 결과는 의미가 없습니다.)
 
요약: 이 글은 독자들을 레코드로 안내할 뿐입니다. 관리 시스템은 일반적인 이해를 가지고 있지만 기사 끝 부분에 응용 프로그램이 제공됩니다. 하지만 Record의 활용방법에 대한 심층적인 분석은 없습니다. 관리 체계. 다음 기사에서는 RecordStore 클래스를 사용하는 방법에 중점을 두고 javax.microedition.rms 패키지의 클래스를 심층적으로 분석하겠습니다.
 
javax.microedition.lcdui.Alert 가져오기;

javax.microedition.lcdui.AlertType 가져오기;

javax.microedition.lcdui.Display 가져오기 > javax.microedition 가져오기; .midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException

import javax.microedition.rms.RecordStoreException;  public class RMSAnalyzer는 MIDlet을 확장합니다
  
  {
  
  private Display display;
  
  private CounterCanvas counterCanvas;
  
  비공개 경고;
  
  보호된 무효 startApp()에서 MIDletStateChangeException이 발생합니다
  
  {
  
  display = Display.getDisplay(RMSAnalyzer.this);
  
  alert = new Alert("错误提示");
  
  시도
  
  {
  
  String 간격 = this.getAppProperty("INTER");
  
  int t = Integer.parseInt(interval);
  
counterCanvas = new CounterCanvas(t, 1, this);
  
  }
  
  catch (RecordStoreException e)
  
  {
  
  this.showAlertError(e.getMessage ());
  
  }
  
  display.setCurrent(counterCanvas);
  
  }
  
  public Display getDisplay()
  
  {
  
  반환 표시;
  
  }
  
  protected void PauseApp()
  
  {
  
  }
  
  protected void destroyApp( boolean arg0)이 MIDletStateChangeException
  
  {
  
  }
  
  public void showAlertError(String message)
  
 를 발생시킵니다. {
  
  alert.setString(메시지 );
  
  alert.setType(AlertType.ERROR);
  
  alert.setTimeout(3000);
  
  display.setCurrent(alert);
  
  }   
  import javax.microedition.lcdui.Command;
  
  import javax.microedition.lcdui.CommandListener;
  
  import javax.microedition.lcdui.Displayable;
  
  수입 javax.microedition.lcdui.Graphics;
  
  import javax.microedition.midlet.MIDletStateChangeException;
  
  import javax.microedition.rms.*;
  
  public 클래스 CounterCanvas는 Canvas 구현을 확장합니다. CommandListener
  
  {
  
  private RMSModel 모델;
  
  private RMSAnalyzer RMSanalyzer;
  
  private int interTime;
  
  private int counter;
> 🎜>  
  public 최종 타이머 타이머 = new Timer();
  
  public CounterCanvas(int interTime, int base, RMSAnalyzer rmsa)
  
  throws RecordStoreException
  
  {
  
  this.interTime = interTime;
  
  this.counter = base;
  
  this.RMSanalyzer = rmsa;
  
  model = 새로운 RMS 모델(기본, RMSanalyzer);
  
  this.addCommand(backCommand);
  
  this.setCommandListener(this);
  
  TimerTask 타이머태스크 = new TimerTask()
  
  {
  
  public void run()
  
  {
  
  try
  
  {
  
  model.writeRecord (INC);
  
  카운터++;
  
  } catch (RecordStoreFullException e)
  
  {
  
  go = false;
  
  model.deleteRMS();
  
  timer.cancel( );
  
  } catch (RecordStoreException e)
  
  {
  
  model.deleteRMS();
  
  RMSanaly zer.showAlertError(e.getMessage());
  
  timer.cancel();
  
  }
  
  repaint();
  
  }
  
  };
  
타이머.일정(timerTask, 1000, interTime);
  
  }
  
  public void setCounter(int counter)
  
  {
  
  this.counter = 카운터;
  
  }
  
  public void setInterTime(int interTime)
  
  {
  
  this.interTime = interTime;
  
  }
  
  보호된 빈 페인트(그래픽 arg0)
  
  {
  
  int SCREEN_WIDTH = this.getWidth();
  
  int SCREEN_HE IGHT = this.getHeight();
  
  arg0.drawRect(SCREEN_WIDTH / 10, SCREEN_HEIGHT / 2,
  
  SCREEN_WIDTH * 4 / 5, 10);
  
  if(RMSanalyzer.getDisplay().is 색상())

  {
  
  arg0.setColor(128, 128, 255);
  
  }
  
  arg0.fillRect(SCREEN_WIDTH / 10, SCREEN_HEIGHT / 2, 카운터, 10) ;
  
if (!go)

위 내용은 J2ME 학습-RMS 입문부터 숙달까지의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.